我正在使用Autofac在我的解決方案中實現IoC,但我懷疑我是否正確地做對了。這裏是場景:
我有一些Manager
類,所有類都從BaseManager
類派生。 BaseManager
有一個protected User CurrentUser
字段。我想要做的是使用Autofac解決CurrentUser
。我寫了一個IUserProvider
接口並實現了幾個類(例如WebUserProvider
和WinformsUserProvider
)。
於是我註冊了我的供應商如下(例如,在Global.asax)
:使用依賴注入正確的方法
builder.Register(c => new WebUserProvider(...)).As<IUserProvider>();
- 我怎樣才能解決依賴關係(訪問
container
在我的課),我可以用一個單或服務定位器模式,但似乎?就像是一個anti-pattern,所以我應該怎麼解決我的依賴?
由於記錄目的,我必須定義BaseManager並在那裏初始化CurrentUser。 (我不希望將當前用戶傳遞給我的經理類中的每個方法)。您說過「容器必須在一個地方初始化一次」,所以如果服務定位器和單例是反模式,那麼還需要初始化和訪問單個容器? – Kamyar 2012-03-06 08:43:26
如果這是一個WinForms應用程序,您可以在接近輸入點(主要方法)的地方創建和設置您的容器。在主體中,您還解析了一個接口並將其傳遞給成員。在ASP.NET中,你可以在global.asax中設置它,然後註冊一個工廠,例如像[here](http://stackoverflow.com/questions/5124393/setting-up-inversion-of-control-ioc -in-ASP淨MVC-與-城堡溫莎)。因此,在DI和IoC中,所有相關類都被抽象並且從未被明確要求。 – oleksii 2012-03-06 08:59:50