我想在我的Unity容器中自动注册公共/简单服务。我认为最简洁的方法是通过自定义属性。
然后,我可以检查程序集中的所有(抽象)类,并使用unity注册这些类型。
我缺少的信息是该类想要注册的接口
例如:
Public Class AutoRegisterAttribute
Public Property ForInterface As System.Type
Public Sub New(ForInterface As System.Type)
Me.ForInterface = ForInterface
End Sub
...
End Class
该课程将按如下方式使用
<AutoRegister(ForInterface:=Stratego.Interfaces.IEngine)>
Public Class StrategoEngine
Implements IEngine
Implements IDisposable
...
End Class
注意,我不只是想找到它实现的任何类,如IDisposable
我尝试使用泛型(泛型不能从Attribute
继承),使用类型参数(在IEngine.GetType中传递导致“需要常量表达式”)
这可能吗?如果是这样,我该如何实现呢?
答案 0 :(得分:3)
有可能,你只需要写:
<AutoRegister(ForInterface := GetType(Stratego.Interfaces.IEngine))>
答案 1 :(得分:0)
我并不完全明白你想要实现的目标,但我认为根据你的示例代码,你可以放一个空属性(比如<AutoRegister>
)并用它来查找你所有的类想要注册。接口类型已由已注册的类实现,因此您可以在运行时从类型中提取它。