c# - 温莎城堡 : Register by Convention with Named part

标签 c# dependency-injection castle-windsor

我使用 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 { }

输出是:

enter image description here


还有其他方法可以选择要注册的类(class)。查看更多in documentation

关于c# - 温莎城堡 : Register by Convention with Named part,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46036827/

相关文章:

c# - 在 ServiceProvider 中使用时,如何防止 DbContext 用完可用的池连接?

c# - 带有 caSTLe windsor 的 dll 插件架构

c# - 从 C# 运行 Oracle 存储过程

c# - 在任何应用程序中持久层有什么用?

c# - 当鼠标聚焦在面板范围内时添加事件

caSTLe-windsor - 使用 CaSTLe Windsor 注入(inject)多个服务实现

asp.net-mvc - SportStore : WebUI. WindsorControllerFactory.GetControllerInstance(System.Type:找不到合适的方法来覆盖

c# - 工厂的正确实现

php - 依赖注入(inject)和依赖倒置的区别

dependency-injection - 如何使用 ILogger 为 azure 函数(Httptrigger)编写单元测试