Ich bin neu in Autofac und einige Probleme mit der Auflösung eines verschachtelten offenen generischen Service-Typs.Autofac mit verschachtelten Open Generics
Ich möchte meine ContactService
zwei Schnittstellen implementieren. Beide Schnittstellen nutzen die gleichen generischen Typparameter, aber die zweite ist verschachtelte:
class ContactService<TParent>
: IContactService<TParent>,
IFeatureProvider<ContactFeature<TParent>>
where TParent : class, IDomainModel
{ }
Wenn ich dies tun:
builder
.RegisterGeneric(typeof(ContactService<>))
.As(typeof(IContactService<>))
.As(typeof(IFeatureProvider<>);
Dann versucht, den Dienst IFeatureProvider<ContactFeature<Household>>
(zum Beispiel) zu lösen verursacht Autofac zu versuchen
ContactService<ContactFeature<Household>>
statt
zu instanziiertIch verstehe, warum das oben genannte nicht funktioniert. Also habe ich versucht, diese stattdessen:
builder
.RegisterGeneric(typeof(ContactService<>))
.As(typeof(IContactService<>))
.As(typeof(IFeatureProvider<>)
.MakeGenericType(typeof(ContactFeature<>)));
Allerdings habe ich immer noch eine ähnliche Fehlermeldung erhalten:
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)
Es sieht aus wie Autofac ContactFeature<Household>
als TParent
statt nur Household
zu passieren versucht.
Entschuldigung für die lange Erklärung. Ich hoffe, dass jemand mir helfen kann, dies zur Arbeit zu bringen!
Vielen Dank.
Thank you very much ... Ich war nicht erwartet, dass es so einfach zu sein! Glauben Sie, dass dies ein Fehler in der generischen Typprüfung von Autofac sein könnte? – AndrewC