其他類在這一點上,我的東西注射到我的控制器自如,在某些情況下建設自己的ResolverServices類。 生活不錯。依賴注入比控制器類
我想不出怎麼做的就是框架自動注入到非控制器類。什麼工作是有框架自動注入到我的控制器IOptions
,這實際上是爲我的項目配置:我想我可以有相同的發生爲我自己的類的我以爲我
public class MessageCenterController : Controller
{
private readonly MyOptions _options;
public MessageCenterController(IOptions<MyOptions> options)
{
_options = options.Value;
}
}
關閉時,我模仿的控制器,就像這樣:
public class MyHelper
{
private readonly ProfileOptions _options;
public MyHelper(IOptions<ProfileOptions> options)
{
_options = options.Value;
}
public bool CheckIt()
{
return _options.SomeBoolValue;
}
}
我想在那裏我失敗的是,當我這樣稱呼它:
public void DoSomething()
{
var helper = new MyHelper(??????);
if (helper.CheckIt())
{
// Do Something
}
}
的proble我已經跟蹤了這個實際上是關於DI在控制器層面談論它的所有事情。我試圖在Controller
對象源代碼中尋找它發生的位置,但它在那裏變得有點瘋狂。
我知道我可以手動創建一個IOptions實例並將它傳遞給MyHelper
的構造函數,但似乎我應該可以使框架做到這一點,因爲它適用於Controllers
。
您的幫助表示讚賞。
當您使用依賴注入你不叫'new'。從來沒有爲應該解決的對象 – Tseng
當我試圖創建一個MyHelper的實例,我不叫新? (1)聽起來太容易了,(2)這是一個語法錯誤。 :-) –
是的,這就是依賴注入的全部要點(特別是如果使用控制容器的反轉來管理和實例化)。將服務/類之外的瞬時推送到ioc容器在內部執行的時間點。在無法通過構造函數注入的情況下,您將創建一個工廠並將工廠界面傳遞給您的服務。它的實現使用容器來解決它,在ASP.NET核心案例注入'IServiceProvider'在你的工廠和調用'IMyHelper helper = services.RequestService()' –
Tseng