Autofac - 添加注册后添加注册
Autofac - Add registration after a registration has been added
我想订阅一个在添加注册后调用的全局事件。
我不想为每个已注册的 service/component 手动订阅一个事件,因为那是样板代码,添加新注册时很容易忘记它。
当事件触发时,我想对已经注册的注册做一些检查,如果满足条件,e.q它是一个命名注册,它是一个引用类型,然后我想添加 additional/new注册,这应该在构建容器之前发生。
实现此目标的正确方法是什么?
我可以在派生自 Module 的 CustomModule 中执行此操作吗?
Br
Autofac 不支持“注册事件”或类似的东西——只支持解析事件。您可以做的是:
- 使用the
OnlyIf
extensions for conditional registration (here are the unit tests showing examples)
- 最后注册您的条件项,以便注册其他所有内容,
OnlyIf
将起作用。
- 可能使用
Properties
dictionary on the ContainerBuilder
对你有利,这样当重要的事情被注册时,它们会添加一些你可以检查的属性字典。
我认为这些东西的某种组合应该可以满足您的需求。但是,不幸的是,没有事件。原因是注册不仅仅是对象的简单集合,就像它们在 Microsoft.Extensions.DependencyInjection
中那样 - 注册都是回调方法,在您调用 Build
之前不会实际执行。最终的一组注册只有在那个时候才真正可用;当调用 Build
时,您无法修改回调列表 post-facto 以添加或更改注册。
该架构不太可能改变,因为它已经融入了注册构建器语法的核心。以上选项都是关于它的。
我想订阅一个在添加注册后调用的全局事件。
我不想为每个已注册的 service/component 手动订阅一个事件,因为那是样板代码,添加新注册时很容易忘记它。
当事件触发时,我想对已经注册的注册做一些检查,如果满足条件,e.q它是一个命名注册,它是一个引用类型,然后我想添加 additional/new注册,这应该在构建容器之前发生。
实现此目标的正确方法是什么?
我可以在派生自 Module 的 CustomModule 中执行此操作吗?
Br
Autofac 不支持“注册事件”或类似的东西——只支持解析事件。您可以做的是:
- 使用the
OnlyIf
extensions for conditional registration (here are the unit tests showing examples) - 最后注册您的条件项,以便注册其他所有内容,
OnlyIf
将起作用。 - 可能使用
Properties
dictionary on theContainerBuilder
对你有利,这样当重要的事情被注册时,它们会添加一些你可以检查的属性字典。
我认为这些东西的某种组合应该可以满足您的需求。但是,不幸的是,没有事件。原因是注册不仅仅是对象的简单集合,就像它们在 Microsoft.Extensions.DependencyInjection
中那样 - 注册都是回调方法,在您调用 Build
之前不会实际执行。最终的一组注册只有在那个时候才真正可用;当调用 Build
时,您无法修改回调列表 post-facto 以添加或更改注册。
该架构不太可能改变,因为它已经融入了注册构建器语法的核心。以上选项都是关于它的。