如何使用带有DependencyResolver和PropertyInjection的Ninject命名绑定

问题描述

|| 我意识到构造函数注入是首选,但我很好奇在使用另一种注入形式时如何使用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;}