C# 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

我有下一个问题,我不明白为什么这段代码不起作用,我想是因为我没有用autofac注入构造函数类,但我不知道如何做到这一点,我们可以帮助我更好地做到这一点吗

在添加发电机之前,如果我在维修工作中对发电机代码进行注释,则需要执行此操作

这是我的代码:

我有一个调用服务的类控制器:

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();

你说得对,非常感谢!!!,利用这个机会,你知道一些方法,你可以自动注入工厂,职责和服务,或者这是唯一的方法。再次感谢。