我有几个方法属性做一些日志记录。我们的日志代码位于一个接口(ILog)的后面,如果这些属性只依赖于该接口而不是实现,我希望它能够被使用。这不是关于可测试性或依赖性反转,而是关于保持组件的耦合清洁。依赖注入和.NET属性
一个例子是,我们有一个腹板(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容器 - 但任何工作都可以)?
这可能是我最终将会采取的路线 - 我只需要弄清楚注射使用Attributes和StrucuteMap ... – 2009-10-21 22:53:18
我遇到了同样的问题,我选择使用属性而不是构造函数参数,因为属性只应用于类型时支持常量值。所以我不认为使用构造函数参数是一个选项,当用于属性(除非你注入常量值)。 – 2012-02-21 20:35:35