我正在使用Unity Container进行拦截 所以我试图添加一个[Trace]属性,例如
public class TraceAttribute:HandlerAttribute
然后在代码中,我可以这样使用它:
public class MyClass
{
[Trace]
public void DoSomething()
{
...
}
}
这是我的问题/目标: 我不希望Trace属性与Unity拦截绑定。如果我以后更改了DI容器,或想要实现我自己的容器等,我想把它换掉,就像我们对接口那样。
类似的东西:
public interface TraceAttribute:ITraceAttribute
然后有具体的实现?那可能吗?
我们面临的挑战之一是,无论我在哪里使用Trace属性,我都必须安装Unity程序集,并且我希望避免这种情况。
谢谢!
答案 0 :(得分:0)
在C#属性中,需要是一个直接或间接派生自类System.Attribute
的类。这意味着使用标准工具不能将interface用作属性。
对于您的场景,您可以创建一个属性,该属性可以从Unity创建所需的实例。如果您将此用于MVC过滤器,则可以立即查看该方案以将其设置为here。对于其他情况,它可能更复杂,但您仍然可以使用某种服务定位器来实现它。