2011-03-29 54 views
2

我有一組類從相同的基類繼承,我需要創建一個工廠方法來實例化基於實現類的GuidAttribute的不同基類實現。所以基本上情況是這樣的:如何從Type.GUID創建對象

abstract class Foo 
{ 
    /* ... */ 
    public static Foo Create(Guid guid) { 
     Type type; 
     // Resolve the type ? 
     return Activator.CreateInstance(type) as Foo; 
    } 
} 

[Guid("<guid1>")] 
class Bar : Foo { ... } 

[Guid("<guid2>")] 
class Baz : Foo { ... } 

是否有任何其他的方式,而不是迭代加載的程序集中的所有類型和緩存結果?

回答

2

它不會是自動的,但你可以簡單地構建一個Dictionary<Guid,Type>或者如果每個程序集(ala插件體系結構)中都有一個通用的接口/類,請求它相應地註冊類型。

有沒有必要使用反射的一切:)我發現它在許多情況下不那麼優雅。

+0

您的回答給我帶來了一個不錯的想法..我可以用T4模板創建字典註冊碼:) – m0sa 2011-03-30 10:07:50

1

我不認爲有另一種方式。當然,這就是我會這樣做的。