gpt4 book ai didi

caSTLe-windsor - 为 CaSTLe Windsor 中的所有接口(interface)实现注册拦截器

转载 作者:行者123 更新时间:2023-12-02 09:35:48 29 4
gpt4 key购买 nike

我对温莎城堡相当陌生,特别是使用拦截器,我想知道是否可以在特定接口(interface)的所有实现中注册拦截器,而无需依次指定每个实现。例如,我有一个名为 IComponent 的接口(interface),它将由许多类实现。我编写了一个 ComponentInterceptor 类,用于在这些类执行特定方法时对其进行操作。我想做这样的事情:

_container.Register(
Component.For<IComponent>()
.Interceptors("ComponentInterceptor")
.LifestyleSingleton())

而不是必须这样做:

     _container.Register(
Component.For<IComponent>()
.ImplementedBy<ComponentA>()
.Interceptors("ComponentInterceptor")
.LifestyleSingleton()),
_container.Register(
Component.For<IComponent>()
.ImplementedBy<ComponentB>()
.Interceptors("ComponentInterceptor")
.LifestyleSingleton())

最佳答案

我找到了另一种方法,我想为所有正在注册的组件注册这个拦截器,并希望做到这一点。为此,我遵循 this article并创建了一个像这样的新类:

public class MyContributeComponentConstruct : IContributeComponentModelConstruction
{
public void ProcessModel(IKernel kernel, ComponentModel model)
{
if (model.Services.Any(s => s == typeof(IComponent)))
{
model.Interceptors.Add(InterceptorReference.ForType<ComponentInterceptor>());
}
}
}

然后使用 CaSTLe Windsor 容器添加此贡献

container.Kernel.ComponentModelBuilder.AddContributor(new MyContributeComponentConstruct ());

关于caSTLe-windsor - 为 CaSTLe Windsor 中的所有接口(interface)实现注册拦截器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26424072/

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