2013-06-03 68 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

相关问题