Я хочу создать Autofac Module
, который переопределяет тип целевого объекта регистрации на основе определенных критериев. Однако новый тип будет иметь один и тот же конструктор и должен быть создан с использованием тех же переопределений параметров, что и исходный тип.Autofac: переопределение типа целевого объекта регистрации из модуля
Я могу использовать AttachToComponentRegistration
, чтобы решить, должна ли регистрация быть переопределена, но само переопределение создает проблему. Я предполагаю, что мне нужно заменить IInstanceActivator
(в частности,), но я не вижу способа получить полную информацию о существующих 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?
);
}
Является ли это что-то, что можно сделать проще и я просто отсутствует что-то здесь?
Почему вы не просто переопределить регистрацию в вашем Modele? Итак, 'builder.Register .As ', потому что, если вы не предоставляете модификатор '.PreserveExistingDefaults()', Autofac просто переопределит предыдущую регистрацию. –
nemesv
@nemesv Я, вероятно, немного неясен - то, что я хочу сделать, это заменить определенные типы целей другим (динамически сгенерированным) типом, который имеет тот же самый конструктор. В вашем подходе я должен либо заранее знать все типы заранее (я не знаю), либо найти способ регистрации параметров для восстановления регистрации (которая возвращается к моему первоначальному вопросу). –
@ AndreySchchekin. Трудно получить то, что вы хотите сделать, можете ли вы отправить пример кода, пожалуйста. –