Я хочу создать Autofac Module
, который переопределяет тип цели регистрации на основе определенных критериев. Однако новый тип будет иметь тот же конструктор и должен быть создан с использованием тех же переопределений параметров, что и исходный тип.
Я могу использовать AttachToComponentRegistration
, чтобы решить, следует ли переопределить регистрацию, но само переопределение создает проблему. Я предполагаю, что мне нужно заменить IInstanceActivator
(конкретно ReflectionActivator
), но я не вижу способа получить полную информацию о существующих ReflectionActivator
— например, нет свойства для получения настроенных параметров.
Пример (упрощенный код):
protected override void AttachToComponentRegistration(IComponentRegistry componentRegistry, IComponentRegistration registration) {
base.AttachToComponentRegistration(componentRegistry, registration);
var reflectionActivator = ((ComponentRegistration)registration).Activator as ReflectionActivator;
if (reflectionActivator == null)
return;
var replacementType = ReplaceType(reflectionActivator.LimitType);
if (replacementType == reflectionActivator.LimitType)
return;
((ComponentRegistration)registration).Activator = new ReflectionActivator(
replacementType,
reflectionActivator.ConstructorFinder,
reflectionActivator.ConstructorSelector,
configuredParameters: ???, // how to get this?
configuredProperties: ??? // or this?
);
}
Это то, что можно сделать проще, и я просто что-то упустил?
builder.Register<MyNewType>.As<IMyInterface>
, потому что, если вы не укажете модификатор.PreserveExistingDefaults()
, Autofac просто переопределит предыдущую регистрацию. - person nemesv   schedule 15.10.2013