Unity容器DI,在代码库中需要将container.Resolve <>称为eveywhere

时间:2019-06-15 20:55:48

标签: c# dependency-injection console-application unity-container

我有一个控制台应用程序。我已将应用程序中的所有类型(12K类)注册到容器中。为了使DI发生,我需要在代码库中的每个位置都执行container.Resolve <>而不是使用new(),还是仅在入口点类上执行container.Resolve <>。

我只尝试了入口点类,而DI并未在类中发生 不会比入口点类低2级(特别是[Dependency]属性注入)。

1 个答案:

答案 0 :(得分:0)

您可以使用该类中的Startup类和config IOC Container。您可以使用Marker Interface(请在google中搜索Marker Interface模式)来解析项目中存在的所有类,以对类实施依赖注入。如果在特定的类构造函数中需要特定的接口,则必须使用DI并在应用程序中运行代码之前在应用程序中注册所有接口。 我认为这段代码可以帮助您: 这段代码与Autofac:

builder.RegisterType<UnitOfWork>().As<IUnitOfWork>().InstancePerLifetimeScope();

Assembly serviceLayerAssembly = typeof(IUserServices).Assembly;

        builder.RegisterAssemblyTypes(assemblies: serviceLayerAssembly)
            .AssignableTo<IMarkedServiceInterface>().AsImplementedInterfaces().InstancePerLifetimeScope();

        builder.RegisterAssemblyTypes(assemblies: serviceLayerAssembly)
            .AssignableTo<IMarkedMapperInterface>().AsImplementedInterfaces().InstancePerLifetimeScope();