我使用 CaSTLe Windsor 作为我的 DI 容器。我注册了指定名称的服务:
container.Register(Component.For<MyService>().Named("MyService"));
问题是我的系统中有很多服务,我厌倦了注册每一个服务。我怎样才能按照惯例在不丢失 Named
部分的情况下做到这一点? (我不介意用与类(class)相同的名字来调用我的服务)
最佳答案
您可以使用以下方法注册从某些基础/接口(interface)派生的所有服务,然后配置它们的名称:
WindsorContainer container = new WindsorContainer();
container.Register(Classes.FromThisAssembly()
.BasedOn<IService>()
.Configure(c => c.Named(c.Implementation.Name)));
对于下面的例子:
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 { }
输出是:
还有其他方法可以选择要注册的类(class)。查看更多in documentation
关于c# - 温莎城堡 : Register by Convention with Named part,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46036827/