依赖注入和.NET属性

时间:2009-10-20 21:48:42

标签: .net dependency-injection attributes ioc-container decoupling

我有一些方法属性可以进行一些日志记录。我们的日志代码位于接口(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容器 - 但是任何有效的依赖都可以)?

2 个答案:

答案 0 :(得分:4)

请参阅此文章 - 如何使用Ninject将依赖项注入ASP.NET MVC ActionFilters

http://codeclimber.net.nz/archive/2009/02/10/how-to-use-ninject-to-inject-dependencies-into-asp.net-mvc.aspx

答案 1 :(得分:1)

你能不能让logger成为一个接口并将它传递给Attribute中的属性或通过构造函数传递:

LoggerAttribute
{
    [Dependency]
    public ILogger Logger {get; set;}

    ...
}

如果是我,虽然我会把记录器放在基类中并在其上设置属性。

相关问题