2012-02-19 45 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