c# - 当还有专门的服务类型时,使用 CaSTLe Windsor 的流畅接口(interface)在装饰器链中注册组件?

标签 c# generics inversion-of-control castle-windsor

我正在尝试为我的数据访问实现一个装饰器链 I存储库。我有一个存储数据的存储库- 访问(目前只是内存中的列表){1},我有一个 进行验证{2}。除此之外,我还有自己的专业 存储库,IUsersRepository {3},它定义了另一个方法 基础接口(interface)。我正在最新的 trunk 版本 5376 上运行。

我希望能够使用 Fluent 注册我的组件 接口(interface) - 是否可以通过 XML 指定 key 用作innerRepo 的服务?如果是这样,怎么办? (参见Bitter Coder Decorator tutorial XML 配置示例)。我宁愿不需要依赖 注册顺序,除了其他任何事情。

我正在关注this blog post .

如果我询问,我就能让装饰器链正常工作 IRepository {4} 的容器;我看到我的 ValidatingRepository 方法在我的数据访问之前被调用。但是我 如果我向容器询问,它就无法工作 IUserRepository (我得到一个 InvalidCastException - 我猜这是 预期的,但它可以解决吗?)。

我想避免需要使用一个装饰库和一个 我的服务中的专业方法存储库;这让我印象深刻 容易出错。目前,我的专业方法都是与 按不同标准获取实体 - 我想我可以让我的 Get 方法采用独立的标准 - 这将允许我只拥有 我的界面上有一个,并且无需专门的 接口(interface)。但我不被允许这样做,因为我们还没有决定 一定要使用NHibernate。也许如果我让 IRepo.Get 采取 委托(delegate)还是 IQueryable?有任何想法吗?我一直在敲头 整个早上都在反对这个,如果我有隧道也不会感到惊讶 愿景,并且有一种不同的、更好的方法;任何建议都是 欢迎!

{1} - {4} 可见 utilitybase的复制/粘贴功能。

最佳答案

交叉发布here (含溶液)。

关于c# - 当还有专门的服务类型时,使用 CaSTLe Windsor 的流畅接口(interface)在装饰器链中注册组件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/197278/

相关文章:

c# - 如何从事件处理程序中更改值参数?

c# - 从 Delphi DLL 发送二进制数据做一个 C# 应用程序

c# - 通用类型。没有装箱转换或类型参数转换

c# - 创建用于访问泛型类型属性的表达式树

swift - 如何从泛型函数调用 Swift 协议(protocol)的静态属性?

c# - 使用 AutoFac 根据构造函数参数名传递不同的实例

c# - 简单注入(inject)器 - 使用一个自定义参数注册服务

c# - ASP.NET DateTime.Now 错误的时间

.net - Fluent IOC 配置/模块的最佳位置(目前正在尝试 Ninject)

c# - 为某些 caSTLe 组件的运行时设置而苦苦挣扎