C# autofac实例构造函数中的类
我有下一个问题,我不明白为什么这段代码不起作用,我想是因为我没有用autofac注入构造函数类,但我不知道如何做到这一点,我们可以帮助我更好地做到这一点吗 在添加发电机之前,如果我在维修工作中对发电机代码进行注释,则需要执行此操作 这是我的代码: 我有一个调用服务的类控制器:C# autofac实例构造函数中的类,c#,configuration,inversion-of-control,autofac,C#,Configuration,Inversion Of Control,Autofac,我有下一个问题,我不明白为什么这段代码不起作用,我想是因为我没有用autofac注入构造函数类,但我不知道如何做到这一点,我们可以帮助我更好地做到这一点吗 在添加发电机之前,如果我在维修工作中对发电机代码进行注释,则需要执行此操作 这是我的代码: 我有一个调用服务的类控制器: public class ZonesController : Controller { private IZoneService zoneService; public ZonesController(I
public class ZonesController : Controller
{
private IZoneService zoneService;
public ZonesController(IZoneService zoneService)
{
this.zoneService = zoneService;
}
[HttpGet]
//Do work
}
这是服务和接口:
public class ZoneService : IZoneService
{
private readonly IZoneRepository zoneRepository;
private readonly IDtoFactory dtoFactory;
private readonly ZoneGenerator zoneGenerator;
public ZoneService(IZoneRepository zoneRepository,
IDtoFactory dtoFactory,
ZoneGenerator zoneGenerator)
{
this.zoneRepository = zoneRepository;
this.dtoFactory = dtoFactory;
this.zoneGenerator = zoneGenerator;
}
public void Add(ZoneDetailDTO zone)
{
zoneGenerator.Generate(zone);
}
//Do Work
}
public interface IZoneService
{
void Add(ZoneDetailDTO zone);
//Do Methods
}
生成器调用ohter类,工厂:
public class ZoneGenerator
{
private readonly ZoneFactory zoneFactory;
private readonly IZoneRepository zoneRepository;
public ZoneGenerator(ZoneFactory zoneFactory, IZoneRepository zoneRepository)
{
this.zoneFactory = zoneFactory;
this.zoneRepository = zoneRepository;
}
public void Generate(ZoneDetailDTO zoneModel)
{
var zone = zoneFactory.Create(zoneModel);
zoneRepository.Add(zone);
}
}
工厂:
public class ZoneFactory
{
private readonly ZoneMapFactory zoneMapFactory;
private readonly ZoneScheduleFactory zoneScheduleFactory;
public ZoneFactory(ZoneMapFactory zoneMapFactory,
ZoneScheduleFactory zoneScheduleFactory)
{
this.zoneMapFactory = zoneMapFactory;
this.zoneScheduleFactory = zoneScheduleFactory;
}
public Zone Create(zoneDetailDTO zone)
{
var map = zoneMapFactory.Create(zone.Map.Address, zone.Map.Latitude, zone.Map.Longitude);
var schedule = zoneScheduleFactory.Create(zone.Schedule.StartHour, zone.Schedule.EndHour);
return new Zone(zone.Name,
zone.ProvinceId,
map,
schedule,
zone.Tags);
}
}
最后是我的容器:
//method in Startup class Asp.Net Core
public IServiceProvider ConfigureServices(IServiceCollection services)
{
services.AddSingleton(_ => Configuration);
// Add framework services.
services.AddApplicationInsightsTelemetry(Configuration);
services.AddMvc();
var containerBuilder = new ContainerBuilder();
containerBuilder.RegisterModule<DefaultModule>();
containerBuilder.Populate(services);
var container = containerBuilder.Build();
return new AutofacServiceProvider(container);
}
public class DefaultModule : Module
{
protected override void Load(ContainerBuilder builder)
{
builder.RegisterType<ZoneService>().As<IZoneService>();
builder.RegisterType<ZoneRepository>().As<IZoneRepository>();
builder.RegisterType<ProvinceService>().As<IProvinceService>();
builder.RegisterType<ProvinceRepository>().As<IProvinceRepository>();
builder.RegisterType<DtoFactory>().As<IDtoFactory>();
}
}
//启动类Asp.Net Core中的方法
公共IServiceProvider配置服务(IServiceCollection服务)
{
services.AddSingleton(=>Configuration);
//添加框架服务。
services.AddApplicationInsightsTelemetry(配置);
services.AddMvc();
var containerBuilder=新的containerBuilder();
containerBuilder.RegisterModule();
containerBuilder.Populate(服务);
var container=containerBuilder.Build();
返回新的AutofacServiceProvider(容器);
}
公共类DefaultModule:模块
{
受保护的覆盖无效负载(ContainerBuilder builder)
{
builder.RegisterType().As();
builder.RegisterType().As();
builder.RegisterType().As();
builder.RegisterType().As();
builder.RegisterType().As();
}
}
您错过了在加载方法中添加以下内容:
builder.RegisterType<ZoneGenerator>().AsSelf();
builder.RegisterType<ZoneFactory>().AsSelf();
builder.RegisterType<ZoneMapFactory>().AsSelf();
builder.RegisterType<ZoneScheduleFactory>().AsSelf();
builder.RegisterType().AsSelf();
builder.RegisterType().AsSelf();
builder.RegisterType().AsSelf();
builder.RegisterType().AsSelf();
你说得对,非常感谢!!!,利用这个机会,你知道一些方法,你可以自动注入工厂,职责和服务,或者这是唯一的方法。再次感谢。