我有2个构造函数定义如下:
public interface IMyService<T1,T2>{}
public class MyService1 : IMyService<SomeTypeA,SomeTypeB>
{
public MyService2(string serviceAUri,IServiceB svc){}
public MyService2(IServiceA svc,IServiceB svc){}
}
public class MyService2 : IMyService<SomeTypeC,SomeTypeD>
{
public MyService2(string serviceAUri,IServiceB svc){}
public MyService2(IServiceA svc,IServiceB svc){}
public MyService2(IServiceC svc,IServiceD svc){}
}
我在不同的T1和T2值上注册了IMyService的多个服务实现,因此注册机制必须在接口的实现中是通用的。
如何在不使用[Inject]属性的情况下指定要调用的构造函数?我可以在“绑定”中指定一些约定,指导Ninject选择带有“url”参数的构造函数而不是其他约定吗?
答案 0 :(得分:2)
我建议不要有多个构造函数。我能想到的唯一情况是,如果你不是班主。例如。在某处注入.NET库类。在极少数情况下,您可以使用ToConstructor
重载来定义构造函数:
int someConstantValue = 1;
Func<int> someOtherValue = () => Random(10);
Bind<IFoo>.ToConstructor(c => new Foo(c.Inject<IBar>(), someConstantValue, someOtherValue, c.Inject<IBaz>());