Dependency injection 扫描并注册应用程序中实现接口的所有类的依赖项

Dependency injection 扫描并注册应用程序中实现接口的所有类的依赖项,dependency-injection,ioc-container,autofac,Dependency Injection,Ioc Container,Autofac,下面的代码来自一个使用结构图的示例应用程序 ObjectFactory.Initialize(x => { x.Scan(scan => { scan.TheCallingAssembly(); scan.AssemblyContainingType<IAppointmentRepository>(); scan.AssemblyContainingType<SchedulingContext>(

下面的代码来自一个使用结构图的示例应用程序

ObjectFactory.Initialize(x =>
{
    x.Scan(scan =>
    {
        scan.TheCallingAssembly();
        scan.AssemblyContainingType<IAppointmentRepository>();
        scan.AssemblyContainingType<SchedulingContext>();
        scan.AssemblyContainingType<ScheduleRepository>();
        scan.AssemblyContainingType<CrudContext>();
        scan.WithDefaultConventions();
        scan.ConnectImplementationsToTypesClosing(typeof(ClientPatientManagement.Core.Interfaces.IRepository<>));
        scan.ConnectImplementationsToTypesClosing(typeof(IHandle<>));
    });
};

StructureMap的
ConnectionImplementationsToTypesClosing
方法将实现连接到打开的泛型类型

因此:

scan.ConnectImplementationsToTypesClosing(typeof(IHandle<>));
scan.connectionImplementationstotypesClosing(typeof(IHandle));
将注册关闭打开的泛型类型IHandle的所有实现

AutoFac中的等效项为:

builder.RegisterAssemblyTypes(AppDomain.CurrentDomain.GetAssemblies())
   .AsClosedTypesOf(typeof(IHandle<>))
   .AsImplementedInterfaces();
builder.RegisterAssemblyTypes(AppDomain.CurrentDomain.GetAssemblyTypes())
.AsClosedTypesOf(typeof(IHandle))
.a实现接口();
有关更多信息,请参阅以下链接

  • scan.ConnectImplementationsToTypesClosing(typeof(IHandle<>));
    
    builder.RegisterAssemblyTypes(AppDomain.CurrentDomain.GetAssemblies())
       .AsClosedTypesOf(typeof(IHandle<>))
       .AsImplementedInterfaces();