具有相同参数数的多个向量的构造函数依赖性解析

时间:2013-03-27 02:02:23

标签: ninject

我有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”参数的构造函数而不是其他约定吗?

1 个答案:

答案 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>());