Castle Windsor: 使用命名部分进行约定注册

3

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

container.Register(Component.For<MyService>().Named("MyService"));

问题在于我系统中有很多服务,而我已经厌倦了每一个都进行注册。如何通过约定方式来处理而不失去“Named”部分?(我不介意使用与类相同的名称调用我的服务)
1个回答

7
您可以使用以下方法注册所有从某个基础/接口派生的服务,然后配置它们的名称:
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 { }

输出如下:

在此输入图片描述


还有其他选择注册类的方式。请参见文档了解更多信息。


哦,是的!非常感谢,这正是我所需要的。 - Eitan
@eitanby - 很高兴听到这个好消息 :) 很高兴能帮忙。 - Gilad Green
@eitanby - 请考虑将问题标记为已解决(这不是必须的,但它有助于未来的人知道它解决了问题)。 - Gilad Green

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接