C# FromAssembliesMatching显式覆盖集合绑定
有没有一种方法可以将对FromAssembliesMatching的调用结合起来,自动设置大多数接口和一些显式绑定?我有以下代码,可以自动将所有ISomething设置为某个值,然后为IUnitOfWork接口设置一个特定的构造函数,其中具体实现接受两个bool作为参数:C# FromAssembliesMatching显式覆盖集合绑定,c#,ninject,ninject-conventions,C#,Ninject,Ninject Conventions,有没有一种方法可以将对FromAssembliesMatching的调用结合起来,自动设置大多数接口和一些显式绑定?我有以下代码,可以自动将所有ISomething设置为某个值,然后为IUnitOfWork接口设置一个特定的构造函数,其中具体实现接受两个bool作为参数: kernel.Bind(x => x.FromAssembliesMatching("*.dll").SelectAllClasses() .InNamespaces("MyNamespace").Bin
kernel.Bind(x => x.FromAssembliesMatching("*.dll").SelectAllClasses()
.InNamespaces("MyNamespace").BindDefaultInterface());
kernel.Bind<IUnitOfWork>().ToConstructor(x => new UnitOfWork(true, false));
kernel.Bind(x=>x.fromsassembliesmatching(“*.dll”).SelectAllClasses()
.InNamespaces(“MyNamespace”).BindDefaultInterface();
Bind().ToConstructor(x=>newunitofwork(true,false));
但是,当我尝试像这样调用TryGet时,我得到一个空值:
kernel.TryGet<MyNamespace.IUnitOfWork>()
kernel.TryGet()
当我切换顺序并在第二次调用中显式调用UnitOfWork实现的排除时,它可以正常工作:
kernel.Bind<IUnitOfWork>().ToConstructor(x => new UnitOfWork(true, false));
kernel.Bind(x => x.FromAssembliesMatching("*.dll").SelectAllClasses()
.InNamespaces("MyNamespace").Excluding(typeof(UnitOfWork))
.BindDefaultInterface());
kernel.Bind().ToConstructor(x=>newunitofwork(true,false));
Bind(x=>x.fromsassembliesmatching(“*.dll”).SelectAllClasses()
.InNamespaces(“MyNamespace”)。不包括(typeof(UnitOfWork))
.BindDefaultInterface());
当我尝试解析IUnitOfWork的实例时,颠倒顺序,或者忽略对排除的调用,会再次导致null
将自动匹配与显式配置相结合的正确方法是什么?我正在使用Ninject 3.2.0.0和Ninject.Extensions.Conventions 3.2.0.0。有两种方法可以处理您的情况,您已经找到了一种:
从约定中排除类型。
- 优点:这与“手册”和约定绑定的顺序无关
- 缺点:您需要在公约和“手册”绑定中的两处提及特殊情况
- 使用
而不是绑定。重新绑定
- 优点:你不需要在两个地方提及特殊情况
- 缺点:只有在执行
重新绑定之前执行约定绑定时,此选项才有效
IKernel.GetBindings(类型serviceType)
。由于一些内部因素,这是不容易改变的