我终于对 Ninject 如何处理 DI 有了一些了解,但遇到了以下问题:
假设我们有一个将两个 WCF ServiceHost 对象作为构造函数参数的类:
public ActivitySinkServer(IDataProvider dataProvider, ServiceHost posClients, ServiceHost activitySinkOperatorClients)
起初我只有一个 ServiceHost 依赖项,所以我很容易处理这样的绑定:
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
现在,我有两个 ServiceHost 依赖项,我怎样才能告诉 Ninject 在哪个构造函数参数处提供哪个,仍然让我的内部代码 Ninject 不知道。(我知道我可以使用手册中的 Ninject 属性和其他内容)。
更新:
我继续使用
.When(request => request.Target.Name == "posClients");
.When(request => request.Target.Name == "activitySinkOperatorClients");
显式指定目标构造函数变量名。看不出有什么害处。但是,如果有人有更优雅和面向对象的方法 - 欢迎您回答。