使用Castle Windsor从一个具体实现动态添加通用服务

时间:2011-06-10 09:03:51

标签: .net castle-windsor

我正在使用Castle Windsor,我有以下内容:

public class NhibernateRepository<T> : IRepository<T>
{
    public NHibernateRepository(...)
    {
        ...
    }

}

我想使用Fluent Windsor API为我的每个域模型注册一项服务

也就是说,我想使用IRepository<Order>动态注册IRepository<Customer>IRepository<Article>NHibernateRepository<T>等,然后将T交换为具体类型每个实例。

我有这样的事情:

container.Register(AllTypes.FromThisAssembly().Where(x => x.Namespace == "DITest.Repository").WithService.Select(...Something...)

但我不确定是否可以做到这一点(AllTypes毕竟意味着我想注册多种类型)。

那里有温莎大师吗?

1 个答案:

答案 0 :(得分:2)

与温莎琐事:

container.Register(Component.For(typeof(IRepository<>))
          .ImplementedBy(typeof(NHibernateRepository<>)))

Windsor将使用任何给定的类型参数自动关闭泛型类型。

请注意,ForImplementedBy的非泛型重载仅仅是因为语言限制而使用 - 将开放泛型类型指定为类型参数(即{{1})无效C#不会编译)。

有关the official documentation wiki的更多信息。