最終的に Ninject が DI を処理する方法をある程度理解しましたが、次の問題に直面しました。
2 つの WCF ServiceHost オブジェクトをコンストラクター パラメーターとして受け取るクラスがあるとします。
public ActivitySinkServer(IDataProvider dataProvider, ServiceHost posClients, ServiceHost activitySinkOperatorClients)
最初は ServiceHost の依存関係が 1 つしかなかったので、次のようにバインディングを簡単に処理できました。
public class CommunicationModule: NinjectModule
{
public override void Load()
{
Bind<POSClient>().ToSelf().WithConstructorArgument("posManager", Kernel.Get<POSManager>());
this.Bind<ServiceHost>().ToMethod(ctx => ctx.Kernel.Get<NinjectServiceHost>(new ConstructorArgument("singletonInstance", c => c.Kernel.Get<POSClient>())));
}
}
このシナリオでは、シングルトン オブジェクトで初期化された依存関係をActivitySinkServer
解決できます。ServiceHost
NinjectServiceHost
2 つの ServiceHost 依存関係があるので、Ninject に、どのコンストラクター パラメーターでどれをフィードするかをどのように伝えることができますか? (マニュアルの Ninject 属性やその他のものを使用できたことはわかっています)。
アップデート:
私は先に進み、ちょうど使用しました
.When(request => request.Target.Name == "posClients");
.When(request => request.Target.Name == "activitySinkOperatorClients");
ターゲット コンストラクターの変数名を明示的に指定します。それに害はありません。ただし、誰かがよりエレガントでオブジェクト指向のアプローチを持っている場合は、喜んで答えてください。