温莎城堡:按公约注册,注册部分

eit*_*nby 3 c# dependency-injection castle-windsor

我正在使用Castle Windsor作为我的DI容器.我在服务中注册了一个名称:

container.Register(Component.For<MyService>().Named("MyService"));
Run Code Online (Sandbox Code Playgroud)

问题是我的系统中有很多服务,而且我已经厌倦了注册其中的每一个.我怎么能按照惯例做到这一点而不失去Named部分?(我不介意用与该类相同的名称调用我的服务)

Gil*_*een 6

您可以使用以下命令注册从某个基本/接口派生的所有服务,然后配置其名称:

WindsorContainer container = new WindsorContainer();
container.Register(Classes.FromThisAssembly()
                          .BasedOn<IService>()
                          .Configure(c => c.Named(c.Implementation.Name)));
Run Code Online (Sandbox Code Playgroud)

对于以下示例:

public interface IService { }
public class Service1 : IService { }
public class Service2 : IService { }
public class Service3 : IService { }
public class Service4 : IService { }
public class Service5 : IService { }
public class Service6 : IService { }
Run Code Online (Sandbox Code Playgroud)

产出是:

在此输入图像描述


还有其他方法可以选择要注册的类.在文档中查看更多内容