2012-02-19 76 views
1

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

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

的一块我失踪的信息是类要进行对

注册的接口(一个或多个),例如:

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结果传递“常量表达式要求”)

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

回答

3

这是可能的,你只需要编写:

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

谢谢,thaqt正是我之后的事情 – Basic 2012-02-20 01:59:36

0

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

+0

这样做的问题是,我不necesarily想注册反对它实现了所有接口。 – Basic 2012-02-20 01:59:04