我要解决的问题是能够定义列表,该列表中的数据来自注入的数据源,但是该列表必须在整个应用程序中都可访问。
现在我有这个课:
public class InmutableLists
{
public static List<Empresa> ListaEmpresas = new EmpresaRepositorioBD().ObtenerEmpresas().ToList();
public static List<Sala> ListaSalas = new SalaRepositorioBD().ObtenerSalas().ToList();
public static List<Maquina> ListaMaquinas = new MaquinasRepositorioBD().ObtenerMaquinas().ToList();
public static List<Tecnica> ListaTecnicas = new TecnicasRepositorioBD().ObtenerTecnicas().ToList();
}
问题是数据源是显式的XX_RepositorioBD,我有几个用于这些列表的数据源(文件,xml等),我希望能够使用Ninject注入适当的数据源。因此,使用IEmmpresaRepositorio代替EmpresaRepositorioBD。喜欢:
public static List<Empresa> ListaEmpresas = new IEmpresaRepositorio.ObtenerEmpresas().ToList();
但我不知道。我尝试将[inject]放在列表和单例上,但是没有用。最后,我需要提供一些UI组件,例如:
comboBoxModel.Datos = InmutableLists.ListaMaquinas;
有什么建议吗?现在它正在工作,但已与BD源数据耦合。
Ninject支持“多次注入”,请参见https://github.com/ninject/ninject/wiki/Multi-injection现在的问题是,当您想注入可枚举类型时,例如数组(Foo[]
),可枚举(IEnumerable<Foo>
),集合(ICollection<Foo>
)或列表(IList<Foo>
)(甚至可能更多)绑定它们不起作用,但是ninject将查找该绑定的所有绑定Foo
并实例化每个绑定,然后将它们作为请求的可枚举值返回。
长话短说,以下内容不起作用:
this.Kernel.Bind<IList<Foo>>().ToConstant(new List<Foo> { foo1, foo2 });
要解决此问题,您可以创建自己的集合类型:
public class EmpresaList : List<Empresa> { }
并绑定它:this.Kernel.Bind()。ToMethod(ctx => InmutableLists.ListaEmpresas);
(当然,您也可以创建单例绑定,常量绑定等等。)
编辑:对于您的示例,您可以使用:
this.kernel
.Bind<EmpresaList>()
.ToMethod(ctx => new EmpresaList(
ctx.Kernel.Get<IEmpresaRepositorio>()
.ObtenerEmpresas()))
.InSingletonScope();
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句