0
인터페이스 IBase에 여러 파생 인터페이스 IDerived1, IDerived2가 있습니다. Autofac을 사용하여 파생 인터페이스에 대한 구현을 등록하고 싶습니다.인터페이스에 대한 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 인터페이스의 전체 목록을 알 필요 피할 것 . 이것이 가능한가?
무엇이'genericRegisterDerivedMethod'입니까? 당신은 generics 언급하지 않은 질문 ... – nemesv
@nemesv : 나는 MethodInfos에 대한 자세한 내용을 제공하는 질문을 편집했습니다. – ChaseMedallion
'DerivedFactory.Create'을 호출 할 필요가 없다면 Autofac이 도움이 될 것입니다. 일반적인 생성자 주입 대신에 정적 팩토리를 호출해야하는 이유가 있습니까? –