gpt4 book ai didi

Autofac - 对象解析时的全局回调

转载 作者:行者123 更新时间:2023-12-01 16:19:07 28 4
gpt4 key购买 nike

如何在 Autofac 容器上注册全局回调,每当解析任何对象时都会触发该回调?

我想使用反射并检查对象是否具有名为 Initialize() 的方法,如果有则调用它。我希望它是鸭子类型的,即不需要接口(interface)。

谢谢!

最佳答案

在 Autofac 中,您可以使用 IComponentRegistration 接口(interface)来订阅各种生命周期事件:

  • 激活时
  • 激活时
  • 发布时

您可以通过创建 Module 并重写 AttachToComponentRegistration 方法来获取 IComponentRegistration 实例:

public class EventModule : Module
{
protected override void AttachToComponentRegistration(
IComponentRegistry componentRegistry,
IComponentRegistration registration)
{
registration.Activated += OnActivated;
}

private void OnActivated(object sender, ActivatedEventArgs<object> e)
{
e.Instance.GetType().GetMethod("Initialize").Invoke(e.Instance, null);
}
}

现在您只需在容器构建器中注册模块即可:

var builder = new ContainerBuilder();
builder.RegisterModule<EventModule>();

并且无论您在哪个模块中注册了该组件,每次组件激活后都会调用 OnActivated 方法。

关于Autofac - 对象解析时的全局回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11663025/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com