我目前正在注册具有特定名称的多个对象,我希望按惯例进行。
目前有效:
container.Register(Component.For<Repository>().Named("Repository1").ImplementedBy<Repository1>());
container.Register(Component.For<Repository>().Named("Repository2").ImplementedBy<Repository2>());
container.Register(
Component.For<RepositoryFactorySelector, ITypedFactoryComponentSelector>().LifestyleSingleton(),
Component.For<IRepositoryFactory>().AsFactory(c => c.SelectedWith<RepositoryFactorySelector>()));
我试过了:
container.Register(Classes.FromThisAssembly().BasedOn<Repository>().WithServiceDefaultInterfaces());
但是我的自定义Factory和DefaultTypedFactoryComponentSelector无法按名称找到组件?
在。中找不到名为'Repository2'的请求组件 容器。你忘了注册吗?
如何使用约定注册组件但动态命名?
答案 0 :(得分:3)
在windsor页面上按惯例注册组件(http://docs.castleproject.org/Windsor.Registering-components-by-conventions.ashx),以下代码段可以帮助您:
container.Register(
Classes.FromAssembly(Assembly.GetExecutingAssembly())
.BasedOn<ICommon>()
.LifestyleTransient()
.Configure(component => component.Named(component.Implementation.FullName + "XYZ"))
);
顺便问一下,为什么不更改组件选择器以根据实现类型选择正确的处理程序?
亲切的问候, Marwijn。