System.Type的自定义属性参数

时间:2012-02-19 03:13:05

标签: .net vb.net attributes custom-attributes

我想在我的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中传递导致“需要常量表达式”)

这可能吗?如果是这样,我该如何实现呢?

2 个答案:

答案 0 :(得分:3)

有可能,你只需要写:

<AutoRegister(ForInterface := GetType(Stratego.Interfaces.IEngine))>

答案 1 :(得分:0)

我并不完全明白你想要实现的目标,但我认为根据你的示例代码,你可以放一个空属性(比如<AutoRegister>)并用它来查找你所有的类想要注册。接口类型已由已注册的类实现,因此您可以在运行时从类型中提取它。