2014-02-13 27 views
0

我想解決的問題是能夠定義List數據來自注入數據源,但列表必須可以在整個應用程序中訪問。列出globaly可訪問所有與DI獲取數據的應用程序

現在我有這個類:

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(); 

但我不明白。我嘗試了[注入]名單和一個單身人士,但它沒有奏效。最後我需要喂一些UI組件:

comboBoxModel.Datos = InmutableLists.ListaMaquinas; 

有什麼建議嗎?現在它正在工作,但與BD源數據相結合。

回答

1

Ninject支持 「多注射液」,見https://github.com/ninject/ninject/wiki/Multi-injection 現在的問題是,當你要注入枚舉類型,如數組(Foo[]),可枚舉(IEnumerable<Foo>),收藏(ICollection<Foo>)或列表(IList<Foo>)(和也許甚至更多)綁定它們不起作用,但相反,ninject會查找所有綁定Foo並instanciate每個綁定,然後返回這些作爲請求的枚舉。

長話短說,下面不工作:

this.Kernel.Bind<IList<Foo>>().ToConstant(new List<Foo> { foo1, foo2 }); 

要解決這個問題,你可以創建自己的集合類型:

public class EmpresaList : List<Empresa> { } 

,並將其綁定: this.Kernel。綁定()。ToMethod(ctx => InmutableLists.ListaEmpresas);

(當然你也可以創建一個單獨的結合,不斷結合,..或什麼都你喜歡/需要)

編輯:您例如,你可以使用:

this.kernel 
    .Bind<EmpresaList>() 
    .ToMethod(ctx => new EmpresaList(
        ctx.Kernel.Get<IEmpresaRepositorio>() 
           .ObtenerEmpresas())) 
    .InSingletonScope(); 
+0

因此,東西是刪除列表上的靜態運算符並使用ToConstant運算符?我可以用相同的方式訪問列表嗎? InmutableList.Lista? – amalbala

+0

不,事情是你需要實現一個特定的列表類型('EmpresaList'),因爲ninject否則認爲它是「多重綁定」。我用一個例子更新了答案。 – BatteryBackupUnit

相關問題