1

私は次のように定義された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」パラメーターを持つコンストラクターを他のコンストラクターよりも選択するようにガイドする「Bind」で指定できる規則はありますか?

4

1 に答える 1

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>());
于 2013-03-28T15:37:01.800 に答える