【发布时间】:2011-08-10 08:35:41
【问题描述】:
我终于对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 可以通过使用单例对象初始化的NinjectServiceHost 来解决它的ServiceHost 依赖项。
现在,我有两个 ServiceHost 依赖项,我如何告诉 Ninject 在哪个构造函数参数处提供哪个,仍然让我的内部代码 Ninject 不知道。 (我知道我可以使用手册中的 Ninject 属性和其他内容)。
更新:
我继续使用,只是使用了
.When(request => request.Target.Name == "posClients");
.When(request => request.Target.Name == "activitySinkOperatorClients");
明确指定目标构造函数变量名。看不出有什么害处。但是,如果有人有更优雅和面向对象的方法 - 欢迎您回答。
【问题讨论】:
标签: .net ninject service-locator