【发布时间】:2011-11-02 15:26:04
【问题描述】:
我正在使用 Ninject 2.0 在我的一个应用程序中处理 DI,我遇到了一些让我感到困惑的事情。老实说,零文档也无济于事。
假设我有一个带有签名的构造函数 -
ctor(IServiceFactory factory1, IServiceFactory factory2)
{
this.factory1 = factory1;
this.factory2 = factory2;
}
虽然这两个服务实现了相同的接口,但它们是完全不同的实现,并且在不同的时间使用,所以我不想注入IEnumerable<IServiceFactory>。
我的问题是,当我绑定实例时,如何告诉 Ninject 为每个实例注入什么?
提前致谢。
更新
为了任何想要查看代码的人都会在阅读 Remo 的链接后结束,...这里是简短的。 (我从来没有意识到 C# 有参数属性!)
//abstract factory
public interface IServiceFactory
{
Service Create();
}
//concrete factories
public class Service1Factory : IServiceFactory
{
public IService Create()
{
return new Service1();
}
}
public class Service2Factory : IServiceFactory
{
public IService Create()
{
return new Service2();
}
}
//Binding Module (in composition root)
public class ServiceFactoryModule : NinjectModule
{
public override void Load()
{
Bind<IServiceFactory>()
.To<Service1Factory>()
.Named("Service1");
Bind<IServiceFactory>()
.To<Service2Factory>()
.Named("Service2");
}
}
//consumer of bindings
public class Consumer(
[Named("Service1")] service1Factory,
[Named("Service2")] service2Factory)
{
}
【问题讨论】:
标签: dependency-injection inversion-of-control ninject-2