Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 温莎城堡拦截器和公约注册_C#_Castle Windsor_Interceptor - Fatal编程技术网

C# 温莎城堡拦截器和公约注册

C# 温莎城堡拦截器和公约注册,c#,castle-windsor,interceptor,C#,Castle Windsor,Interceptor,我目前正在使用Castle Windsor管理我的应用程序的依赖项 我目前正在使用类。fromsassemblycontaining注册给定类型的所有组件IFoo,并希望为所有这些类注册一个拦截器 当我注册单个组件时,我可以让拦截器工作,如下所示: public void SetUpContainer(IWindsorContainer container) { container.Register(Component.For<IFoo>()

我目前正在使用Castle Windsor管理我的应用程序的依赖项

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

当我注册单个组件时,我可以让拦截器工作,如下所示:

public void SetUpContainer(IWindsorContainer container)
{
    container.Register(Component.For<IFoo>()
                                .ImplementedBy<Foo>()
                                .LifestyleSingleton().Interceptors<MyIntercepter>());
}
public void SetUpContainer(IWindsorContainer container)
{
     container.Register(Classes.FromAssemblyContaining<Foo>()
                               .BasedOn(typeof(IFoo<>))
                               .WithService.Base());
}
public void SetUpContainer(IWindsorContainer)
{
container.Register(Component.For())
.由()实施
.LifestyleSingleton().Interceptors());
}
但是,我希望继续使用Classes.fromsassembly按约定注册。我的注册码当前看起来像这样:

public void SetUpContainer(IWindsorContainer container)
{
    container.Register(Component.For<IFoo>()
                                .ImplementedBy<Foo>()
                                .LifestyleSingleton().Interceptors<MyIntercepter>());
}
public void SetUpContainer(IWindsorContainer container)
{
     container.Register(Classes.FromAssemblyContaining<Foo>()
                               .BasedOn(typeof(IFoo<>))
                               .WithService.Base());
}
public void SetUpContainer(IWindsorContainer)
{
container.Register(Classes.FromAssemblyContaining()
.BasedOn(类型(IFoo))
.with.service.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>());
public void SetUpContainer(IWindsorContainer)
{
container.Register(Classes.FromAssemblyContaining()
.BasedOn(类型(IFoo))
.WithService.Base()
.Configure(r=>r.Interceptors());
}
我还需要注册拦截器:

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>());
container.Register(Component.For());
但你可能会在其他地方注册(按照惯例)