我当前正在注册带有特定名称的多个对象,我想通过惯例进行。
当前有效:
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());
但是我的自定义工厂和DefaultTypedFactoryComponentsElector无法按名称找到组件?
在 容器。你忘了注册吗?
如何使用约定但动态命名的组件?
在Windsor页面上有关注册组件(http://docs.castleproject.org/windsor.registering-components-components-by-conventions.ashx)),以下代码应帮助您:
container.Register(
Classes.FromAssembly(Assembly.GetExecutingAssembly())
.BasedOn<ICommon>()
.LifestyleTransient()
.Configure(component => component.Named(component.Implementation.FullName + "XYZ"))
);
顺便说一句,为什么不更改compontentselector以根据实现类型选择正确的处理程序?
亲切的问候,marwijn。