В настоящее время у меня есть интерфейс для одного шага в конвейере.
public interface IPipelineStep<T1, T2>
where T1: ModelObject
where T2: EntityObject { }
И у меня есть целая куча шагов, которые реализуют этот интерфейс:
public class ValidateModelStep<T1, T2> : IPipelineStep<T1, T2>
where T1: ModelObject
where T2: EntityObject { }
public class Step2<T1, T2> : IPipelineStep<T1, T2>
where T1: ModelObject
where T2: EntityObject { }
public class Step3<T1, T2> : IPipelineStep<T1, T2>
where T1: ModelObject
where T2: EntityObject { }
public class Step4<T1, T2> : IPipelineStep<T1, T2>
where T1: ModelObject
where T2: EntityObject { }
Я сейчас нахожусьрегистрируя их так:
builder.RegisterGeneric(typeof(ValidateModelStep<,>)).As(typeof(IPipelineStep<,>)).AsSelf();
builder.RegisterGeneric(typeof(Step2<,>)).As(typeof(IPipelineStep<,>)).AsSelf();
builder.RegisterGeneric(typeof(Step3<,>)).As(typeof(IPipelineStep<,>)).AsSelf();
builder.RegisterGeneric(typeof(Step4<,>)).As(typeof(IPipelineStep<,>)).AsSelf();
И тогда я могу использовать autofac для создания этих шагов.Проблема в том, что у меня много, много шагов.И очень жаль, что приходится регистрировать каждую из них каждый раз, когда я создаю новую.
Есть ли способ зарегистрировать их все сразу?
Я знаю, что вы можете использовать сканирование сборок и AsClosedTypesOf
, но, похоже, это не работает для открытых универсальных реализаций открытых универсальных интерфейсов.
То, что я пробовал:
builder.RegisterAssemblyTypes(myAssembly).AsClosedTypesOf(typeof(IPipelineStep<,>)).AsImplementedInterfaces();
builder.RegisterAssemblyTypes(myAssembly).AssignableTo(typeof(IPipelineStep<,>)).As(typeof(IPipelineStep<,>)).AsSelf();
builder.RegisterAssemblyTypes(myAssembly)
.Where(t => t.IsAssignableFrom(typeof(IPipelineStep<,>)))
.As(typeof(IPipelineStep<,>)).AsSelf();
Есть ли способ использовать AsClosedTypesOf
, когдаРеализация интерфейса также должна содержать дженерики?
Заранее спасибо