如何在已注册的组件中添加拦截

本文关键字:添加 组件 注册 | 更新日期: 2023-09-27 17:54:11

我想在注册逻辑结束时通过类型发现将拦截逻辑添加到由特定属性标记的类中。

我的问题是,标记的类型可能已经注册(例如webapi控制器),所以我想先检查,以确保如果类型已经注册,并在这种情况下"修改"以某种方式注册。不幸的是,我没有找到任何方法来访问IRegistrationBuilder,通过调用EnableClassInterceptors扩展方法来注册我的拦截器是微不足道的。

在某些情况下,这似乎是可能的-例如Activating事件或IRegistrationSource接口,但这样我必须承担很多责任,如果可能的话,我希望避免。

有谁知道是否有任何琐碎的——或者任何——方法可以用健壮的方式做到这一点…?

如何在已注册的组件中添加拦截

据我所知,一旦注册,就没有办法访问IRegistrationBuilder。我看了Autofac的源代码和城堡集成的唯一选择,我能看到的是与注册本身的工作。

最简单的方法是使用Autofac模块:
public class XModule : Module 
{
    protected override void AttachToComponentRegistration(
        IComponentRegistry componentRegistry, 
        IComponentRegistration registration)
    {
        // code inspired from RegistrationExtensions 
        registration.Preparing += (sender, e) => { /* ... */ }; 
    }
}

你可以在这里找到autofac动态代理集成的源代码:RegistrationExtensions.cs (github)

另一个选择是重构你注册类型的方式,以允许更多的经典注册。