私はAutofacを使用して、複数の種類と一般的なインターフェイスを登録しようとしていると私は呼びたい:汎用インターフェースをAutoFacのインターフェースタイプに登録するには?
container.Resolve<Enumerable<IGenericInterface<IInterface>>>();
を
メソッドはIInterfaceの種類とIGenericInterfaceのすべての実装を解決するには。
私はすでにインタフェースを持つジェネリックインターフェイスとして具体的なクラスと一般的なインタフェースを持つ具象クラスに登録してみました:
builder.Register(r => new TalkToMeLoud())
.As<IGenericInterface<Hello>>()
.As<IGenericInterface<Bye>>()
.As<IGenericInterface<IInterface>>()
.InstancePerDependency();
をしかし、これはエラーをスローします:
An unhandled exception of type 'System.ArgumentException' occurred in Autofac.dll
Additional information: The type 'TestConsoleApp.TalkToMeLoud' is not assignable to service 'TestConsoleApp.IGenericInterface`1[[TestConsoleApp.IInterface, TestConsoleApp, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]'.
のでこれはUnityからAutofacへの移行の一部です。これはUnityのように次のようにして行うことができます:
Container.ResolveAll(typeof(IGenericInterface<IInterface>))
誰もこの問題を解決する方法を知っていますか?これは私のtestproject
これは私にとって有益な情報ですが、UnityがIEnumerable>ですべての実装を解決できる理由を知っていますか? –
donlobbo
@donlobbo: 'IGenericInterface'がvariantでない場合、Unityが返すリストは空でなければなりません。そうでない場合は、あなたの質問を更新してください:1.あなたのインターフェイス定義、2.あなたの単一構成3.どのような実装があなたがその列挙型を解決するときに解決され、4つの実装の定義。 –
Steven