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