问题描述
||
我意识到构造函数注入是首选,但我很好奇在使用另一种注入形式时如何使用Ninject的上下文“命名绑定”。
具体来说,在使用DependencyResolver或属性注入时如何执行以下操作。
public MyService([Named(\"Alpha\")] IRepository repository)
{
this.repository = repository;
}
解决方法
您可以创建一个命名绑定以在Alpha上工作:
Bind<IRepository>().To<AlphaRepository>().Named(\"Alpha\");
然后您可以指定其他名称,例如:
Bind<IRepository>().To<AnotherRepository>().Named(\"Beta\");
使用示例构造函数时,您将获得AlphaRepository。
为了将名称与属性一起使用,请像对参数所做的操作一样,为属性赋予name属性:
[Inject,Named(\"Alpha\")]
public IRepository Foo {get; set;}