2011-06-10 87 views
0

我使用溫莎城堡從一個具體的實施添加通用服務,並且我有以下幾點:動態使用溫莎城堡

public class NhibernateRepository<T> : IRepository<T> 
{ 
    public NHibernateRepository(...) 
    { 
     ... 
    } 

} 

我想用流利的溫莎API要註冊一個服務我的每個領域模型

也就是說,我想動態註冊IRepository<Order>IRepository<Customer>IRepository<Article>等使用NHibernateRepository<T>其中T然後在每個實例的具體類型進行交換。

我有這樣的事情:

container.Register(AllTypes.FromThisAssembly().Where(x => x.Namespace == "DITest.Repository").WithService.Select(...Something...) 

但我不知道這甚至可以做到(AllTypes確實畢竟意味着我要註冊多個類型)。

任何溫莎古魯在那裏?

回答

2

瑣碎溫莎:

container.Register(Component.For(typeof(IRepository<>)) 
      .ImplementedBy(typeof(NHibernateRepository<>))) 

溫莎它將自動與任何給定的類型參數關閉泛型類型。

注意的ForImplementedBy非泛型重載只使用,因爲語言的限制 - 這是不合法的C#指定開放式泛型類型爲類型的參數(即For<IRepository<>>不會編譯)。

有關the official documentation wiki的更多信息。

+0

非常感謝!我不知道有可能指定空類型參數列表。非常緊湊和可讀性:) – Max 2011-06-10 10:56:56