[英]Unity InjectionFactory Doesn't Run
摘要:似乎沒有針對類型映射運行InjectionFactory。 我想知道為什么以及如何解決問題。
一開始,我嘗試注冊界面
Container.RegisterType<ILogger>(new InjectionFactory((c, t, n) => {
return LogManager.GetLogger(n);
}));
並使用服務定位器解決
ServiceLocator.GetInstance<ILogger>("Operation Manager");
這導致
The current type, NLog.ILogger, is an interface and cannot be constructed. Are you missing a type mapping?
經過一番修補,我決定嘗試其他方法,並使用具體類型注冊了服務
Container.RegisterType<Logger>(new InjectionFactory((c, t, n) => {
return LogManager.GetLogger(n);
}));
並將分辨率方法更改為
public OperationService([Dependency("Operation Service")]Logger logger)
這將導致以下錯誤:
The type Logger does not have an accessible constructor.
我能想到的唯一原因是,實際上沒有調用我通過InjectionFactory傳遞的函數來解析該對象。
這是因為您注冊了沒有名稱的類型,並且試圖通過名稱解析它。 Unity尋找(ILogger, "Operation Manager")
,但找不到任何注冊。 沒有名稱的注冊永遠不會被視為合格的候選人,因此不會調用InjectionFactory
。
據我所知,沒有內置的方法可以實現您想要的目標。 使用自定義擴展名可能會實現,但是到目前為止,我的嘗試均未成功。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.