Dependency injection 温莎城堡命名批量注册

Dependency injection 温莎城堡命名批量注册,dependency-injection,castle-windsor,castle-windsor-3,Dependency Injection,Castle Windsor,Castle Windsor 3,在我的项目中,我有接口IProcess和许多实现这个接口的类。我需要注册所有这些实现。以下代码对我来说运行良好: Container.Register(Component.For<IProcess>().Named("SampleProcess").ImplementedBy<SampleProcess>()); Container.Register(Component.For<IProcess>().Named("SampleProcess2").Imple

在我的项目中,我有接口IProcess和许多实现这个接口的类。我需要注册所有这些实现。以下代码对我来说运行良好:

Container.Register(Component.For<IProcess>().Named("SampleProcess").ImplementedBy<SampleProcess>());
Container.Register(Component.For<IProcess>().Named("SampleProcess2").ImplementedBy<SampleProcess2>());
Container.Register(Component.For().Named(“SampleProcess”).ImplementedBy());
Container.Register(Component.For().Named(“SampleProcess2”).ImplementedBy());
然而,如果我有很多实现,那么使用这种方法进行注册是很乏味的。因此,我正在寻找一种注册方法,以按名称注册给定程序集中的所有IProcess实现。应该用于注册密钥的名称只是类名


有人能告诉我在哪里找吗

听起来像是一个典型的场景

container.Register(
类。FromThisAssembly()
.BasedOn()
.WithServiceBase()
//如果你真的需要显式地控制命名
.Configure(c=>c.Named(c.Implementation.Name)
)

通常不应使用显式命名组件,除非您有多个组件具有相同的实现类,所以请确保您确实需要它。

如果您不显式指定名称,默认情况下不会发生这种情况吗?谢谢Krzysztof!这真的很简单-我一直在使用约定r但是总是缺少一些东西。在我的例子中,包含名称配置的行确实不需要。
container.Register(
    Classes.FromThisAssembly()
        .BasedOn<IProcess>()
        .WithServiceBase()
        // and then if you *really* need to explicitly control naming
        .Configure(c => c.Named(c.Implementation.Name)
        )