【问题标题】:Custom Attribute parameter of System.TypeSystem.Type 的自定义属性参数
【发布时间】:2012-03-09 22:08:10
【问题描述】:

我想在我的统一容器中自动注册常用/简单服务。我认为最简洁的方法是通过自定义属性。

然后我可以检查程序集中的所有(抽象)类并统一注册这些类型。

我缺少的信息是类要注册的接口

例如:

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 导致“需要常量表达式”)来执行此操作

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

【问题讨论】:

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


    【解决方案1】:

    有可能,你只需要写:

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

    【讨论】:

    • 谢谢,这正是我所追求的
    【解决方案2】:

    我不完全理解您要实现的目标,但我认为根据您的示例代码,您可以放置​​一个空属性(类似于&lt;AutoRegister&gt;)并使用它来查找您想要的所有类登记。接口类型已经被注册的类实现了,所以你可以在运行时从类型中提取出来。

    【讨论】:

    • 这个问题是我不一定要针对它实现的所有接口注册它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-24
    • 1970-01-01
    • 1970-01-01
    • 2017-02-07
    • 2015-09-18
    • 1970-01-01
    • 2015-04-26
    相关资源
    最近更新 更多