0

我正在使用 Unity Container 进行拦截,因此正在尝试添加 [Trace] 属性,例如

公共类 TraceAttribute : HandlerAttribute

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

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

这是我的问题/目标:我不希望 Trace 属性与 Unity Interception 相关联。如果我以后更改 DI 容器,或者想要实现自己的容器等。我想将其换掉,就像我们对接口所做的那样。

就像是:

公共接口 TraceAttribute : ITraceAttribute

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

我们面临的挑战之一是,在我使用 Trace 属性的任何地方,我都必须安装 Unity 程序集,我想避免这种情况。

谢谢!

4

1 回答 1

0

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

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

于 2014-10-18T15:35:19.197 回答