我需要登錄很多東西都在我的領域,所以我的大部分領域和應用服務都依賴於日誌實現。假設我創建了這個小合同:默認依賴注入?
public interface ILogger {
void Info(string message);
}
很好。現在,我實現了一個基於log4net的基礎設施服務:
public class Log4NetProxy : ILogger {
private ILog _logger = LogManager.GetLogger();
public void Info(string message) {
_logger.Info(message);
}
}
然而,由於大多數我的班有其他的依賴不僅僅是一個記錄,我越來越接近一個構造,在噴射模式..
public class MyService : IMyService {
public MyService(ILogger logger, IRepository repo, IAlsoNeedSettings settings) {
}
}
如何避免像設置或日誌記錄這樣的基本核心需求的注入,只關注我真正需要的依賴關係?物業注入?服務外牆?靜態日誌工廠?
看面向方面的編程 –
'私人的ILog _logger = LogManager.GetLogger();'是一個服務定位器,而不是噴射器。我使用Autofac,但是我仍然沒有找到一種好方法來注入不是爲了注入而設計的對象圖(構造器或屬性/場);通常有一些需要整合的「根」,然後如果存在差距,它可能需要將容器暴露給直接/ SL解析(至少直到該圖可以開始再次解析)。 – user2864740
相關:http://stackoverflow.com/q/2420193/126014 –