2017-12-14 9 views
-1

私は2つの実装Foo1とFoo2を持つIFooインターフェイスを持っています。NInject:複数のサービスを単一のインターフェイスにバインドする

public interface IFoo 
{ 
    void Process(); 
} 

public class Foo1 : IFoo 
{ 
    public void Process() 
    { 
    } 
} 

public class Foo2 : IFoo 
{ 
    public void Process() 
    { 
    } 
} 

私は以下のように登録しています。

kernel.Bind(x => x 
       .FromAssemblyContaining<IFoo>() 
       .SelectAllClasses().InheritedFrom<IFoo>() 
       .BindAllInterfaces() 
       .Configure(b => b.InRequestScope())); 

が、私はこの

public class TestController: ApiController 
{ 
    public TestController(IFoo[] fooServices) 
    { 

    } 
} 

しかし、サービスリストfooServicesのように、すべてのIFooサービスを取得しようとしているが空です。代わりに私の2つのサービスをすべて手に入れたい。

助けてください!

+0

は手動で同じインターフェースの代わりに、あなたのLINQの式に複数のタイプをバインドしようとしています。これは、各プラグインの種類を横断し、そのインターフェイスを取得し、次のように登録することで解決された ?バインディングエラーか解決エラーかどうかを確認するだけです。 – ckuri

+0

@spender、ありがとうございます。私はこれを試してみる。 –

+0

@ckury、あなたはヒントを持っています!どちらかを試してみる価値がある –

答えて

1

問題が解決しました。

問題は、サービスの登録後にカスタムアセンブリリゾルバを使用してプラグインライブラリが読み込まれるという問題でした。そこでKernelを静的プロパティとして公開し、ロードされた後にサービスの登録を行いました。

次の問題は、「バインディング」が2つのプラグインを1つのインターフェイスで登録できなかったことです。

foreach (var interfaceType in pluginServiceType.GetInterfaces()) 
    kernel.bind(interfaceType).to(pluginServiceType) 
+0

あなたがそこに着いてくれてうれしく思います...私のコメントは直接の回答ではなく、あなたがそこに行くのを助ける診断ツールではありません。 – spender

関連する問題