0
問題背景:無法解析的接口使用Unity
我使用統一解析類和它所有的依賴關係。
問題:
我想傳遞到通過統一的接口類型,我試圖做到這一點,如下所示類的構造函數:
public static IFacade UnityNewsFacadeResolver()
{
IUnityContainer unityContainer = new UnityContainer();
unityContainer.RegisterType<IFacade, NewsFacade>();
IFacade newsFacadeInstance = unityContainer.Resolve<NewsFacade>();
return newsFacadeInstance;
}
以下顯示Unity設置構造函數參數的'NewsFacade'類。值得注意的是傳遞一個「NewsStoryHandler」具體類型,我想在這個類是一款基於IE INewsStoryHandler的接口傳遞:
private INewsStoryHandler _NewsStoryHandler;
//*****Unity will only pass in a concrete implementation, I want to pass it as an interface but cannot:******
public NewsFacade(NewsStoryHandler newsStoryHandler)
{
if (newsStoryHandler == null)
{
throw new Exception("newsStoryHandler is null at the constrcutor");
}
_NewsStoryHandler = newsStoryHandler;
}
目前統一不會解決,並通過在接口類型,它必須是具體實現如上所示。這意味着我不能在單元測試時模擬界面。
有人能告訴我爲什麼Unity不會解析並傳入基於其接口的類型?
出色答卷。這一切工作。如果我可以問另一個問題。如果是Facade,我有三個類,即'頂層'類,這消耗了'NewsHandler',並且這消耗了在消費者構造函數中設置的每個'NewsRepository'。我將如何去設置並返回底層對象?即新聞資料庫? – user1352057
您可以配置unity來注入正確的存儲庫,即'unityContainer.RegisterType()',然後當解析立面時,存儲庫將被注入到消息處理程序中,該消息處理程序將被注入到立面中。 –
Lukazoid