C# .NET内核与Autofac DI

C# .NET内核与Autofac DI,c#,.net,dependency-injection,.net-core,autofac,C#,.net,Dependency Injection,.net Core,Autofac,我想将Autofac集成到我的API中。解决方案在多个项目上进行拆分,以便所有项目保持解耦。我已将配置服务设置为: public IServiceProvider ConfigureServices(IServiceCollection services) { // Add framework services. ... ... // Autofac var builder = new ContainerBuilder(); builder.R

我想将
Autofac
集成到我的API中。解决方案在多个项目上进行拆分,以便所有项目保持解耦。我已将配置服务设置为:

public IServiceProvider ConfigureServices(IServiceCollection services)
{
    // Add framework services.
    ...
    ...

    // Autofac
    var builder = new ContainerBuilder();

    builder.RegisterType<RouteRepository>().As<IRouteRepository>();

    builder.Populate(services);
    ApplicationContainer = builder.Build();
    return new AutofacServiceProvider(ApplicationContainer);
}

另外,可能与问题有关的是,
RouteRepository
将一个变量作为构造函数中的参数,我不知道在哪里可以定义要传递的内容?默认情况下没有配置文件。

如果您说您的
RouteRepository有一个依赖项,那么您必须通知容器如何解决该问题:

// singletone
builder.RegisterInstance(new TaskRepository())
   .As<ITaskRepository>();
// or instance based creation
builder.Register(c => new LogManager(DateTime.Now))
   .As<ILogger>();
//单音
builder.RegisterInstance(新建TaskRepository())
.As();
//或基于实例的创建
注册(c=>newlogmanager(DateTime.Now))
.As();

或者
Autofac
无法解析您的类型。

确实
ConfigureServices
调用
services.AddMvc()
Configure
调用
UseMvc()
?是的,我只是从显示的代码中省略了它,因为我认为它与存储库接受构造函数中的参数无关,您必须在startup中定义依赖项:
builder.RegisterType().As()
// singletone
builder.RegisterInstance(new TaskRepository())
   .As<ITaskRepository>();
// or instance based creation
builder.Register(c => new LogManager(DateTime.Now))
   .As<ILogger>();