public interface IDomainValidator<in TDomain>{}
public interface IDomainValidation<TDomain> {
void Validate(TDomain domain);
}
public class DomainValidation<TDomain> : IDomainValidation<TDomain>
{
public DomainValidation(IEnumerable<IDomainValidator<TDomain>> validators)
{
....
}
}
を私は反変インタフェースがIEnumerable<IDomainValidator<object>>
の空の配列として解決される問題を抱えているのIEnumerable
閉鎖型を実装する登録済みの型ではなく、これらの閉鎖型がオブジェクトとして返される方法を判断する方法はありますか?
アップデート1
私はジェネリック型からこれを呼んでいたことに気づき、それが実際に問題を持つ可能性があるものだったということ。 DomainValidation<TDomain>
には、ドメインバリデータのリストを説明するオブジェクトもあります。それは以下のようなクラスに注入されている
builder.RegisterGeneric(typeof(DomainValidation<>)).As(typeof(IDomainValidation<>));
:
public class Implementation
{
public Implementation(IDomainValidation<SomeClass> validation) {...}
}
このクラスは、技術的に間違っているものですDomainValidationはに登録されています。 IComponentRegistrationがIDomainValidation<SomeClass>
の正しいタイプを示しているだけでなく
アップデート2
オブジェクトとして表示され、それはContravariantAdapterを持っているサービスが正しいタイプを示しています。ターゲットは+ Target {Activator = DomainValidation
1(ReflectionActivator)、サービス= [Flightdocs.Infrastructure.Validation.Domain.IDomainValidation 1[[System.Object, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]], Lifetime = Autofac.Core.Lifetime.CurrentScopeLifetime, Sharing = None, Ownership = OwnedByLifetimeScope} Autofac.Core.IComponentRegistration {Autofac.Core.Registration.ComponentRegistration}
と表示されています。問題はどこにあるのでしょうか。今私はなぜこれが起こっているとして固執しています。私は何かが登録されていると仮定していますIDomainValidation<object>
IDomainValidatorを実装するタイプをautofacでどのように登録していますか? –
'.AsClosedTypeOf(typeof(IDomainValidator <>)); 「実現したことの1つは、ジェネリック実装クラスに挿入されていることです。私は質問を更新します。 – cberthold