Искам да създам 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