2011-03-08 75 views
2

我正在做一個ASP.NET MVC中的項目,我想在其中實現一個IoC容器。我是IoC容器的新手,一直在尋找解決方案來解決我的問題,但目前爲止無濟於事。如何在使用IoC容器時傳入對象

問題是dat數據分佈在各種數據庫中。用戶登錄後,將從授權數據庫中檢索用戶的數據庫,然後在用戶會話中進行設置。該用戶會話在構建時傳遞給服務和存儲庫,以便他們在需要訪問數據庫時使用它。

典型的裸剝離服務(無接口和IOC)看起來像這樣:

private CompetitionRepository _CompetitionRepo; 

    public CompetitionService(DataContext dataContext) 
     : this (new CompetitionRepository(dataContext)) 
    { } 

    public CompetitionService(CompetitionRepository competitionRepo) 
    { 
     this._CompetitionRepo = competitionRepo; 
    } 

的「DataContext的」包含了兩個與該正確的數據庫被選擇用於該會話的性質。由於服務和存儲庫無法訪問會話本身(它們的範圍之外),因此它們需要此對象。

我的問題是,我如何在IoC中設置類似的東西(無論哪個容器,我只想知道總體思路)。據我所見,大多數容器不允許傳入對象?還是設計從根本上有缺陷?

回答

2

就我所見,大多數容器 不允許傳入對象?

你不能看得太遠;)我知道的大多數IoC容器都有能力做到這一點。您需要根據其類型註冊一個對象的實例。如何以及何時構建這個對象可能是比你問的更深的問題。不過,去的時候,你可以做這樣的事情與Unity容器:

DataContext context = ..... ; 
container.RegisterInstance(context); 

每次創建需要一個DataContext類的實例時,你會得到你所註冊的一個。如果類型要與實例相關聯與不同的是,你可以強制它像這樣:

container.RegisterInstance<IDataContext>(context); 

欲瞭解更多信息,採取look here

+0

謝謝!你的回答指向正確的方向。 – Randam 2011-03-08 10:47:54