私はAutofacを初めて使い、ネストされたオープンジェネリックサービスタイプの解決にいくつかの問題があります。ネストされたオープンジェネリックのオートファック
ContactService
に2つのインターフェイスを実装したいと思います。両方のインターフェイスは、同じジェネリック型パラメータを使用することが、2番目は、ネストされている:私がすれば
class ContactService<TParent>
: IContactService<TParent>,
IFeatureProvider<ContactFeature<TParent>>
where TParent : class, IDomainModel
{ }
が、これは:次に、(例えば)サービスIFeatureProvider<ContactFeature<Household>>
を解決しようと
builder
.RegisterGeneric(typeof(ContactService<>))
.As(typeof(IContactService<>))
.As(typeof(IFeatureProvider<>);
にAutofacを引き起こし
ContactService<ContactFeature<Household>>
代わりの
をインスタンス化しようとする試み私は上記がうまくいかない理由を理解しています。それでは私の代わりにこれを試してみました:
TypeLoadException: GenericArguments[0], 'ContactFeature`1[Household]',
on 'Contact`1[TParent]' violates the constraint of type parameter 'TParent'.
System.RuntimeTypeHandle.Instantiate(RuntimeTypeHandle handle, IntPtr* pInst,
Int32 numGenericArgs, ObjectHandleOnStack type)
ArgumentException: GenericArguments[0], 'ContactFeature`1[Household]',
on 'IContactService`1[TParent]' violates the constraint of type 'TParent'.
System.RuntimeType.ValidateGenericArguments(MemberInfo definition,
RuntimeType[] genericArguments, Exception e)
それはAutofacがContactFeature<Household>
TParent
だけではなくHousehold
とを渡そうとしているように見えます:
builder
.RegisterGeneric(typeof(ContactService<>))
.As(typeof(IContactService<>))
.As(typeof(IFeatureProvider<>)
.MakeGenericType(typeof(ContactFeature<>)));
しかし、私はまだ同様のエラーを取得します。
長い説明は申し訳ありません。私は誰かが私にこれを働かせるのを助けることを願っています
ありがとうございます。
var builder = new ContainerBuilder();
builder.RegisterGeneric(typeof(ContactService<>))
.As(typeof(IContactService<>));
builder.RegisterGeneric(typeof(ContactService<>))
.As(typeof(IFeatureProvider<>));
var container = builder.Build();
var service = container.Resolve(typeof(IFeatureProvider<ContactFeature<Household>>));
var service2 = container.Resolve(typeof(IContactService<Household>));
Console.WriteLine(service.GetType());
Console.WriteLine(service2.GetType());
Console.ReadKey();
どちらも解決さはあなたにContactService<Household>
のインスタンスを与えるだろう:
は、私はそれがとても簡単であることを期待していなかった...ありがとうございました!これがAutofacのジェネリック型チェックのバグかもしれないと思いますか? – AndrewC