如何使用约定但动态命名的组件进行注册



我当前正在注册带有特定名称的多个对象,我想通过惯例进行。

当前有效:

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。

最新更新