属性可以实现接口吗?

时间:2014-10-14 19:31:02

标签: c# interface attributes unity-container interception

我正在使用Unity Container进行拦截 所以我试图添加一个[Trace]属性,例如

  

public class TraceAttribute:HandlerAttribute

然后在代码中,我可以这样使用它:

public class MyClass
{
    [Trace]
    public void DoSomething()
    {
        ...
    }
}

这是我的问题/目标: 我不希望Trace属性与Unity拦截绑定。如果我以后更改了DI容器,或想要实现我自己的容器等,我想把它换掉,就像我们对接口那样。

类似的东西:

  

public interface TraceAttribute:ITraceAttribute

然后有具体的实现?那可能吗?

我们面临的挑战之一是,无论我在哪里使用Trace属性,我都必须安装Unity程序集,并且我希望避免这种情况。

谢谢!

1 个答案:

答案 0 :(得分:0)

在C#属性中,需要是一个直接或间接派生自类System.Attribute的类。这意味着使用标准工具不能将interface用作属性。

对于您的场景,您可以创建一个属性,该属性可以从Unity创建所需的实例。如果您将此用于MVC过滤器,则可以立即查看该方案以将其设置为here。对于其他情况,它可能更复杂,但您仍然可以使用某种服务定位器来实现它。