2013-06-03 70 views
1

我在Castle Windsor注入了以下接口。我如何在Ninject中做同樣的事情?批量註冊與Ninject通用接口的所有實現

container.Register(
    AllTypes.FromAssemblyNamed("Apps.Web") 
     .BasedOn(typeof(ICommandHandler<>)) 
     .WithService.FirstInterface()); 

我已經試過:

this.Bind(x => x.FromAssembliesMatching("Apps.Web.dll") 
    .Select(y => y.Namespace.EndsWith("Handlers")) 
    .BindSingleInterface()); 

,但得到的對象引用不設置到對象錯誤的實例。

回答

6

您可以使用Ninject的convention binding extensons(從NuGet安裝它)執行此操作。

類似下面應該工作

kernel.Bind(x => x.FromAssembliesMatching("Apps.Web") 
    .SelectAllClasses() 
    .InheritedFrom(typeof(ICommandHandler<>)) 
    .BindSingleInterface()); 

我不是100%肯定的FromAssembliesMatching模式,但你應該能夠調整,要拿起你的裝配。

+0

工作。我可以看到kernel.GetModules()的綁定。但我無法看到它在kernel.GetAll >()? – CurlyFro

+0

所以它是綁定的,但你不能解決它?嗯... – khellang

+0

我也嘗試過,但是'FromThisAssembly'和'GetAll khellang

相關問題