dependency-injection - 如何在 Autofac 中注册位于不同程序集中的服务和类型?

标签 dependency-injection ioc-container autofac

我正在尝试向 Autofac 注册我的“服务”。这些服务是根据约定命名的(聚合根+“服务”),并且都实现了具有相同名称的接口(interface):“我”+服务名称。例如,OrderService实现 IOrderService .
但是,具体类型和接口(interface)都在单独的程序集中。到目前为止,我有以下代码:

builder.RegisterAssemblyTypes(typeof(OrderService).Assembly)
       .Where(t => t.Name.EndsWith("Service"))
       .AsImplementedInterfaces();
这是在 Autofac 中完成此任务的最佳方法吗?如果我的某些服务派生自抽象类怎么办?

最佳答案

Autofac 不关心这些接口(interface)是否在同一个程序集中。所以你的注册很好,但如果你想从几个程序集中加载“服务”,你可以传入一组程序集:

builder.RegisterAssemblyTypes(AppDomain.CurrentDomain.GetAssemblies())
   .Where(t => t.Name.EndsWith("Service"))
   .AsImplementedInterfaces();

我想提醒您注意某些指示 SRP violations 的类后缀。 , 和 RAP violationsHelper , Manager , 和... Service .您可能想尝试不同的设计,其中此类服务类的每个查询和用例都放置在其自己的类中并标记为 with a generic interface .这样你就可以用一行注册同一个通用接口(interface)的所有实现:

builder.RegisterAssemblyTypes(
    AppDomain.CurrentDomain.GetAssemblies())
    .AsClosedTypesOf(typeof(ICommandHandler<>));

关于dependency-injection - 如何在 Autofac 中注册位于不同程序集中的服务和类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18263852/

相关文章:

c# - 通过依赖注入(inject)传递计时器并配置/启动计时器

design-patterns - 在类库中创建 Ninject 内核

mvvm - 依赖注入(inject)以及何时使用静态类

c# - 在 .NET RESTful 应用程序中使用 Ninject?

c# - 如何检测类型是否为 Func<T> 并获取 T 的类型

autofac - 具有运行时构造函数参数的键控委托(delegate)工厂?

c# - Autofac 通用接口(interface)工厂

c# - 静态方法的 Autofac 工厂

java - Jersey 的依赖注入(inject)

asp.net-mvc - "ConnectionString has not been initialized"调用两个不同的存储库时出错