我想为我的存储库实现自动注册,遵循以下约定:
IRepository
IRepository
的抽象类,例如:UserRepository
EntityFrameworkUserRepository
我想使用castle将依赖项注入我的控制器。
public LinkService(LinkRepository linkRepository)
{
if (linkRepository == null)
{
throw new ArgumentNullException("linkRepository");
}
this.linkRepository = linkRepository;
}
如何将“实现IRepository
”的组件映射到“以与组件同名结尾的实现”
container.Register(Component.For<LinkRepository>().ImplementedBy<EntityFrameworkLinkRepository>())
这样的东西,只有自动注册,所以每次创建一个新的存储库时,我都不必手动添加所有存储库
答案 0 :(得分:1)
这样的事可能会这样做:
var container = new WindsorContainer();
container.Register(
AllTypes.FromAssemblyContaining<EntityFrameworkLinkRepository>()
.BasedOn<IRepository>()
.WithService.Select((type, types) => type.BaseType != null && type.Name.EndsWith(type.BaseType.Name)
? new[] {type.BaseType}
: Enumerable.Empty<Type>()));