gpt4 book ai didi

.net - 在 Windsor 中注册通用装饰器

转载 作者:行者123 更新时间:2023-12-01 06:51:07 24 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





How can I register a generic decorator using Castle Windsor?

(2 个回答)


6年前关闭。




我有一个看起来像这样的界面:

public interface IQueryHandler<in TQuery, out TResult>
where TQuery : IQuery<TResult>
{
TResult Handle(TQuery query);
}

我想用这个缓存装饰器包装我的所有处理程序:

public class CachingQueryHandler<TQuery, TResult>
: IQueryHandler<TQuery, TResult>
where TQuery : IQuery<TResult>
{
public CachingQueryHandler(
IQueryHandler<TQuery, TResult> handler,
IQueryCachingRule<TQuery, TResult> cachingRule,
ITaggedCacheProvider cache)
{
//...
}

//...
}

这就是我在 Windsor 中注册组件的方式:
container.Register(
Component
.For(typeof(IQueryHandler<,>))
.ImplementedBy(typeof(CachingQueryHandler<,>)),
Classes
.FromAssemblyContaining<GetUserCourseStatesHandler>()
.BasedOn(typeof(IQueryHandler<,>))
.WithServiceBase()
)

在几篇文章中,我读到 Windsor 可以自动连接装饰器链,如果所有组件都按有效顺序注册。但就我而言,温莎只是忽略了我的 CachingQueryHandler当我试图解决任何 IQueryable<,> 时注册.
在名为 Potentially Misconfigured Components 的容器的私有(private)字段中我发现了这个警告:

Some dependencies of this component could not be statically resolved. IGSystems.Common.CQRS.CachingQueryHandler'2 is waiting for the following dependencies: - Service 'IQueryHandler'2' which points back to the component itself. A dependency cannot be satisfied by the component itself, did you forget to register other components for this service?

最佳答案

好吧,如果您希望您的缓存查询处理程序装饰您的实际实现,您应该重新排序您的注册。

container.Register(
Classes
.FromAssemblyContaining<GetUserCourseStatesHandler>()
.BasedOn(typeof(IQueryHandler<,>))
.WithServiceBase(),
Component
.For(typeof(IQueryHandler<,>))
.ImplementedBy(typeof(CachingQueryHandler<,>))
)

关于.net - 在 Windsor 中注册通用装饰器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9888019/

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