我有几个方法属性可以做一些记录。我们的日志记录代码位于接口 (ILog) 后面,如果属性仅依赖于该接口而不是实现,我会喜欢它。这实际上并不是关于可测试性或依赖倒置,而是关于保持组件的耦合清洁。
一个例子是我们有一个 web (Mvc) 特定属性,如下所示:
HandleExceptionAttribute : FilterAttribute, IExceptionFilter
{
public void OnException(ExceptionContext context)
{
LogFactory.CreateInstance().Info("message here", "log entry type");
}
}
LogFactory 依赖于具体的实现 Log.cs。这具有将我的 Web DLL 耦合到包含具体实现的 DLL 的不幸效果——使整个系统更加僵化和脆弱。
任何其他明显存在这种依赖关系的位置,我们只需使用我们的 IOC 容器来注入它。这正是我现在想要对属性执行的操作,但我不确定如何操作!
所以,我的问题是:如何将具体的依赖项注入到接口后面的 .NET Framework 属性中(最好通过像 StructureMap 这样的 IOC 容器 - 但任何可行的方法都可以)?