我有一个控制台应用程序。我已将应用程序中的所有类型(12K类)注册到容器中。为了使DI发生,我需要在代码库中的每个位置都执行container.Resolve <>而不是使用new(),还是仅在入口点类上执行container.Resolve <>。
我只尝试了入口点类,而DI并未在类中发生 不会比入口点类低2级(特别是[Dependency]属性注入)。
答案 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();