我想創建一個Autofac Module
,它根據特定條件覆蓋註冊目標類型。然而,新類型將具有相同的構造函數,並且應該使用與原始類型相同的參數覆蓋來創建。Autofac:從模塊重寫註冊目標類型
我可以使用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?
);
}
這是不是可以做的更容易,我只是失去了一些東西?
你爲什麼不只是覆蓋登記您的MODELE?所以'builder.Register .As '因爲如果你不提供'.PreserveExistingDefaults()'修飾符,Autofac將會覆蓋之前的註冊。 –
nemesv
@nemesv我可能有點不清楚 - 我想要做的是用具有相同構造函數的不同(動態生成)類型替換某些目標類型。在你的方法中,我必須提前靜態(我沒有)知道所有類型,或者有辦法找到註冊參數來重建註冊(這返回到我原來的問題)。 –
@AndreyShchekin你很難得到你想要做的事情,你可以發佈示例代碼嗎? –