中的Autofac模块的依赖项注入.NET Core 3.0



我对创建和注册模块还很陌生,但我正在努力更好地了解整个过程。目前,我正试图将依赖项注入到autofac模块中,但我认为问题是autofac在进行依赖项注入之前注册了它的模块。这是我的安全模块:

public class SecurityModule : Module
{
private readonly IConfiguration configuration;
public SecurityModule(IConfiguration configuration)
{
this.configuration = configuration;
}
protected override void Load(ContainerBuilder builder)
{
builder.RegisterType<TeamManager>()
.WithParameter("tenantName", this.configuration["TenantName"])
.InstancePerDependency();
}
}

这是program.cs中我注册模块的部分:

public static IHostBuilder CreateHostBuilder(string[] args)
{
return Host.CreateDefaultBuilder(args)
.UseServiceProviderFactory(new AutofacServiceProviderFactory())
.ConfigureContainer<ContainerBuilder>(builder =>
{
builder.RegisterAssemblyModules(typeof(Startup).Assembly);
builder.RegisterModule<LoggingModule>();
builder.RegisterModule(new ConfigurationModule(args));
builder.RegisterModule<CXDatabaseModule>();
builder.RegisterModule<SecurityModule>();
})
.ConfigureLogging(logging =>
{
logging.ClearProviders();
logging.AddLog4Net();
})
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.ConfigureKestrel(options =>
{
options.Limits.MaxRequestBodySize = 209715200;
});
webBuilder.UseStartup<Startup>();
})
.UseNServiceBus((configuration, container) =>
{
return CreateStartableEndpoint(configuration, container);
});
}

这就是我收到的错误。是否有可能指定该模块应在稍后阶段注册?还是我遗漏了一些重要信息?

DependencyResolutionException:找不到具有"Autofac"的构造函数。果心激活剂。反射DefaultConstructorFinder位于Quba中的类型上。CX.Web.Api.AutofacIntegration.SecurityModule"可以使用可用的服务和参数调用:无法解析参数"Microsoft。扩展。配置构造函数"Void.ctor(Microsoft.Extensions.configuration.IConfiguration("的IConfiguration-configuration。

只修复了SecurityModule
您可以使用Load方法在SecurityModule中创建IConfiguration
删除SecurityModule构造函数和IConfiguration字段。

public class SecurityModule : Module
{
protected override void Load(ContainerBuilder builder)
{
// create configuration by your appsettings.json
var configurationBuilder = new ConfigurationBuilder();
configurationBuilder.AddJsonFile("appsettings.json");
var configuration = configurationBuilder.Build();
builder.RegisterType<TeamManager>()
.WithParameter("tenantName", configuration["TenantName"])
.InstancePerDependency();
}
}

注意:builder.RegisterModule<TModule>(),其中TModule是一个新的约束,意味着您必须有一个没有公共参数的默认构造函数

相关内容

  • 没有找到相关文章

最新更新