C# 在Ninject中按名称绑定所有具体实现
我有一个接口C# 在Ninject中按名称绑定所有具体实现,c#,ninject,ninject-extensions,C#,Ninject,Ninject Extensions,我有一个接口IAdapdor,还有几个具体的实现。使用Ninject 3.0,我按名称绑定它们: IKernel kernel = new StandardKernel(); kernel.Bind<IAdapdor>().To<Adaptor1>().Named("Adaptor1"); kernel.Bind<IAdapdor>().To<Adaptor2>().Named("Adaptor2"); ... IKernel内核=新的标准内核
IAdapdor
,还有几个具体的实现。使用Ninject 3.0,我按名称绑定它们:
IKernel kernel = new StandardKernel();
kernel.Bind<IAdapdor>().To<Adaptor1>().Named("Adaptor1");
kernel.Bind<IAdapdor>().To<Adaptor2>().Named("Adaptor2");
...
IKernel内核=新的标准内核();
kernel.Bind().To
更具体地说,我在寻找以下内容:
kernel.Bind(x => x.FromThisAssembly()
.SelectAllClasses()
.InheritedFrom<IAdapdor>()
.BindByClassName()); // <-- BindByClassName() does not really exist
kernel.Bind(x=>x.FromThisAssembly()
.SelectAllClasses()
.继承自()
.BindByClassName());// 您可以使用自定义约定创建的绑定。因此,您可以使用它向名为的注册绑定:
kernel.Bind(x => x
.FromThisAssembly()
.SelectAllClasses().InheritedFrom<IAdapdor>()
.BindAllInterfaces()
.Configure((b, c) => b.Named(c.Name)));
kernel.Bind(x=>x
.FromThisAssembly()中的
.SelectAllClasses().InheritedFrom()
.BindAllInterfaces()
.Configure((b,c)=>b.Named(c.Name));
我很想知道这个惯例是什么。。。因为我没看到。约定扩展并不能解决所有问题。。。有时候你需要显式地绑定东西。@Simon Whitehead——据我所知,我应该能够在一行约定中完成这项工作。我将编辑问题以反映这一点……这是否考虑了数字因素?c.Name
将获得您的类型名称,因此adapter1
或adapter2
。但是你可以根据beging的类型在那里写任何你得到的“adapter1”
和“adapter2”
registered@nemesv好的!我知道这应该很简单。。。谢谢