我正在使用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毕竟意味着我想注册多种类型)。
那里有温莎大师吗?
答案 0 :(得分:2)
与温莎琐事:
container.Register(Component.For(typeof(IRepository<>))
.ImplementedBy(typeof(NHibernateRepository<>)))
Windsor将使用任何给定的类型参数自动关闭泛型类型。
请注意,For
和ImplementedBy
的非泛型重载仅仅是因为语言限制而使用 - 将开放泛型类型指定为类型参数(即{{1})无效C#不会编译)。
有关the official documentation wiki的更多信息。