2016-01-13 100 views
0

我是新來的溫莎城堡。Castle Windsor:自動註冊每個類型的其他程序集

在一個總成,Domain.Classes

class BaseEntity 
{ 
} 

class Entity1 : BaseEntity {} 
class Entity2 : BaseEntity {} 
class Entity3 : BaseEntity {} 

在另一個組件,我有接口,

class GenericImplementation <BaseEntity>: IGenerticInterface<BaseEntity> 
{ 
    // base on BaseEntity 
    // does something 
} 

如何註冊GenericImplementation爲每BaseEntity(ENTITY1,ENTITY2,ENTITY3等)在程序集中給出Domain.Classes?

我試過這種方式,但沒有工作。

container.Register(Classes.FromAssemblyNamed("Domain.Classes") 
     .BasedOn(typeof(IGenerticInterface<>)) 
     .Configure(c => c.ImplementedBy(typeof (GenericImplementation<>))) 
     .LifestyleTransient()); 
+0

[Castle Windsor - 開放式通用接口的IoC註冊?]的可能重複?(http://stackoverflow.com/questions/12344708/castle-windsor-ioc-registration-for-open-generic-interfaces) –

回答

0

你可以做一般的註冊如下:

 container.Register(Classes.FromThisAssembly() 
       .BasedOn(typeof(IGenerticInterface<>)) 
       .WithServiceAllInterfaces() 
       .Configure(c => c.LifestylePerThread())); 

您可以更改.FromThisAssembly()尋找到你需要的任何組件。

您可以更改.WithServiceAllInterfaces()以使用特定的實現,但在我們的系統中,我們使用其所有接口註冊了服務。

+0

感謝答覆。我仍然困惑。我試過這個,但沒有工作container.Register(Classes.FromAssemblyNamed(「Domain.Classes」) .BasedOn(typeof(IGenerticInterface <>)) .Configure(c => c.ImplementedBy(typeof(GenericImplementation <>)) ) .LifestyleTransient()); – Nas

+0

如果你想通過調用'.ImplementedBy(typeof(GenericImplementation <>)''來手動註冊一個實現,那麼你將不得不聲明''''在'<> '括號 – Skuzzbox

+0

你可以嘗試使用:'container.Register(Classes.FromAssemblyNamed( 「Domain.Classes」) .BasedOn(typeof運算(IGenerticInterface <>)) .WithServiceAllInterfaces() .LifestyleTransient());' 我。發現使用'.WithServiceAllInterfaces()'發現每個'GenericImplementation()'的實現並註冊它'IGenericImplementation ' – Skuzzbox

相關問題