多くの派生インターフェイス IDerived1、IDerived2 を持つインターフェイス IBase があります。Autofac を使用して派生インターフェイスの実装を登録したいと考えています。
派生インターフェースがあれば、そのインターフェースの解決メソッドを作成できます。私が疑問に思っているのは、コンテナを構築するときにすべての派生インターフェイスのリストを列挙することを避ける方法はありますか?
私が今持っているものは次のとおりです。
public static void Register<TDerived>(ContainerBuilder b) where TDerived : IBase {
b.Register(cc => DerivedFactory.Create<TDerived>(cc.Resolve<SomeDependency>())
.As<TDerived>()
.InstancePerLifetimeScope();
}
// in my registration method
ContainerBuilder b = ...
MethodInfo genericRegisterDerivedMethod = this.GetType().GetMethod("Register", BindingFlags.Public | BindingFlags.Static);
List<Type> allDerivedInterfaces = /* query across various assemblies for interfaces which extend IBase */
allDerivedInterfaces.ForEach(t => genericRegisterDerivedMethod
.MakeGenericMethod(t)
.Invoke(null, new object[] { b })
);
私がしたいのは:
public static void Create<TDerived>(IComponentContext cc) where TDerived : IBase {
return DerivedFactory.Create<TDerived>(cc.Resolve<SomeDependency>());
}
// in my registration method
ContainerBuilder b = ...
MethodInfo genericResolveDerivedMethod = this.GetType().GetMethod("Create", BindingFlags.Public | BindingFlags.Static);
b.RegisterDerivedTypesOf<IBase>((cc, t) => (IBase)genericResolveDerivedMethod
.MakeGenericMethod(t)
.Invoke(null, new object[] { cc, t })
);
これにより、アプリケーションの起動時に IDerived インターフェイスの完全なリストを知る必要がなくなります。これは可能ですか?