我正在使用依賴注入,並且遇到了一些我找不到的東西。我有一個需要一個通用的記錄基類:依賴注入,繼承和泛型
public class BaseClass
{
public BaseClass(ILogger<BaseClass> logger)
{
// code here
}
}
然後,我有一個類繼承也需要通用的記錄:
public class SubClass : BaseClass
{
public SubClass(ILogger<SubClass> logger)
{
// code here
}
}
的問題是,這並不與消息編譯; BaseClass不包含接受0個參數的構造函數。
這將是很容易解決,如果我能做到這一點:
public SubClass(ILogger<SubClass> logger) : base(logger)
的問題是,這是不合法的或者因爲ILogger<SubClass>
不是ILogger<BaseClass>
一個實例(它不與編譯最好的超載匹配...有一些無效參數)。
一個可能的解決方案: 我想我不必使用構造函數注入,而是使用DependencyResolver
。
問題:肯定有人提出過這個問題嗎?是否有可能使用構造函數注入?如果是這樣,我該怎麼辦?
注:在當前項目中,我使用StructureMap
(for MVC4),但我認爲,這裏的工具是稍微無關。
如果你發現自己注入了相同的依賴到不同的類來做同樣的事情,你可能想看看攔截。 –
@FacioRatio感謝您的洞察。之後,我閱讀了http://programmers.stackexchange.com/questions/139111/interception-vs-injection-a-framework-architecture-decision,這非常有趣。正如我在其他地方指出的那樣,'ILogger'已經通過DI使用在許多不同的解決方案和項目中,但對於未來的解決方案,這當然值得考慮。 –
Halvard
裝飾很不錯,但是當你結束了許多做同樣事情的裝飾器時,是時候進行截取了。請參閱:http://simpleinjector.codeplex.com/wikipage?title=Advanced-scenarios#Interception –