编程语言
首页 > 编程语言> > c#-温莎城堡拦截器和按公约注册

c#-温莎城堡拦截器和按公约注册

作者:互联网

我目前正在使用Castle Windsor来管理我的应用程序的依赖关系.

我目前正在使用Classes.FromAssemblyContaining来注册给定类型IFoo的所有组件.并希望为所有这些类注册一个拦截器.

当我注册单个组件时,我可以使拦截器正常工作:

public void SetUpContainer(IWindsorContainer container)
{
    container.Register(Component.For<IFoo>()
                                .ImplementedBy<Foo>()
                                .LifestyleSingleton().Interceptors<MyIntercepter>());
}

但是我想继续使用Classes.FromAssembly进行约定注册.我的注册码目前看起来像这样:

public void SetUpContainer(IWindsorContainer container)
{
     container.Register(Classes.FromAssemblyContaining<Foo>()
                               .BasedOn(typeof(IFoo<>))
                               .WithService.Base());
}

如何为所有已注册的IFoo添加拦截器?

解决方法:

您只需要使用Configure方法来添加拦截器:

public void SetUpContainer(IWindsorContainer container)
{
    container.Register(Classes.FromAssemblyContaining<Foo>()
                              .BasedOn(typeof(IFoo<>))
                              .WithService.Base()
                              .Configure(r => r.Interceptors<FooInterceptor>()));
}

我还需要注册拦截器:

container.Register(Component.For<FooInterceptor>());

但是大概你会在其他地方注册(按照惯例).

标签:interceptor,castle-windsor,c
来源: https://codeday.me/bug/20191028/1951733.html