gpt4 book ai didi

c# - 没有找到 'Autofac.Core.Activators.Reflection.DefaultConstructorFinder' 的构造函数

转载 作者:行者123 更新时间:2023-12-01 18:03:49 25 4
gpt4 key购买 nike

当我尝试使用 Xml 配置设置参数时,出现以下错误:

None of the constructors found with 'Autofac.Core.Activators.Reflection.DefaultConstructorFinder' on type 'LM.AM.Core.Services.EmailService' can be invoked with the available services and parameters: Cannot resolve parameter 'System.String testSmtp' of constructor 'Void .ctor(System.String)'.

以下是相关文件:

web.config

  <configSections>
<section name="autofac" type="Autofac.Configuration.SectionHandler, Autofac.Configuration" />
</configSections>

<autofac>
<components>
<component type="LM.AM.Core.Services.EmailService , LM.AM.Core" service="LM.AM.Core.Infrastructure.Services.IEmailService , LM.AM.Core.Infrastructure">
<parameters>
<parameter name="testSmtp" value="abc" />
</parameters>
</component>
</components>
</autofac>

服务等级

public class EmailService : IEmailService
{
public string _testSmtp;

public EmailService (string testSmtp)
{
_testSmtp = testSmtp;
}
}

注册

builder.RegisterType<EmailService>().As<IEmailService>().SingleInstance();

Global.asax

var builder = new ContainerBuilder();
builder.RegisterModule(new ConfigurationSettingsReader("autofac"));

builder.RegisterModule<Core.ModuleInstaller>();

builder.RegisterControllers(typeof(MvcApplication).Assembly);
AutofacContainer.Container = builder.Build();

var emailSvc = AutofacContainer.Container.Resolve<IEmailService>();

我已经检查了容器是否知道 xml 参数,并且我已尽可能密切地关注 Wiki,但由于某种原因,该参数无法在唯一的构造函数上解析,并且我收到了上述错误。

这应该很简单。任何人都可以提供一些关于我的建议可以尝试让它工作吗?

最佳答案

您已注册 EmailService 两次。

一次进入 web.config 并一次使用

builder.RegisterType<EmailService>().As<IEmailService>().SingleInstance();

如果您在 Core.ModuleInstaller 中有上面的行,那么它将覆盖 web.config 配置。并且因为这里您没有指定 Autofac 抛出的参数一个异常(exception)。

因此,要解决此问题,只需从 Core.ModuleInstaller 模块中删除 EmailService 注册即可。

如果您在多个位置使用Core.ModuleInstaller并且需要在那里注册EmailService,那么您需要更改模块加载的顺序:

var builder = new ContainerBuilder();
builder.RegisterModule<Core.ModuleInstaller>();
builder.RegisterModule(new ConfigurationSettingsReader("autofac"));

或者告诉 Autofac 不要覆盖 EmailService 的注册(如果它已存在于 PreserveExistingDefaults 中):

builder.RegisterType<EmailService>().As<IEmailService>()
.SingleInstance().PreserveExistingDefaults();

关于c# - 没有找到 'Autofac.Core.Activators.Reflection.DefaultConstructorFinder' 的构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16006248/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com