小编Dio*_*ion的帖子

使用'Autofac.Core.Activators.Reflection.DefaultConstructorFinder'找到的构造函数都没有

当我尝试使用Xml配置设置PARAMETER时,我收到以下错误:

在'LM.AM.Core.Services.EmailService'类型的'Autofac.Core.Activators.Reflection.DefaultConstructorFinder'中找到的构造函数都不能使用可用的服务和参数调用:无法解析参数'System.String testSmtp'的构造函数'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>
Run Code Online (Sandbox Code Playgroud)

服务类

public class EmailService : IEmailService
{
    public string _testSmtp;

    public EmailService (string testSmtp)
    {
        _testSmtp = testSmtp;
    }
}
Run Code Online (Sandbox Code Playgroud)

注册

builder.RegisterType<EmailService>().As<IEmailService>().SingleInstance();
Run Code Online (Sandbox Code Playgroud)

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>();
Run Code Online (Sandbox Code Playgroud)

我已经检查过容器是否知道xml参数,我尽可能接近Wiki,但由于某种原因,参数没有在唯一的构造函数上解析而且我收到了上述错误.

这应该很简单.任何人都可以提供一些建议,我可以尝试使其工作吗?

autofac

28
推荐指数
2
解决办法
6万
查看次数

SQL问题 - 高容量转换和PK违规

我正在写一个大批量的交易系统.我们以每秒300-500左右的速度接收消息,然后需要尽快将这些消息保存到数据库中.这些消息存放在消息队列中,然后从那里读取.

我实现了一个Competing Consumer模式,它从队列中读取并允许对消息进行多线程处理.但是,当应用程序运行时,我经常遇到主键违规.

我们正在运行SQL 2008.示例表结构将是:

TableA
{
    MessageSequence INT PRIMARY KEY,
    Data VARCHAR(50)
}
Run Code Online (Sandbox Code Playgroud)

调用存储过程以保留此消息并看起来像这样:

BEGIN TRANSACTION

INSERT TableA(MessageSequence, Data )
SELECT @MessageSequence, @Data
WHERE NOT EXISTS
(
  SELECT TOP 1 MessageSequence FROM TableA WHERE MessageSequence = @MessageSequence
)

IF (@@ROWCOUNT = 0)
BEGIN

UPDATE TableA
SET Data = @Data
WHERE MessageSequence = @MessageSequence

END

COMMIT TRANSACTION
Run Code Online (Sandbox Code Playgroud)

所有这些都在TRY ... CATCH块中,所以如果出现错误,它会回滚事务.

我尝试过使用表格提示,比如ROWLOCK,但它并没有什么区别.由于Insert被评估为单个语句,因此我仍然得到"插入时的主键"问题似乎很荒谬.

有谁知道为什么会这样?您是否有任何想法可以指出我的解决方案?

sql multithreading sql-server-2008

5
推荐指数
1
解决办法
902
查看次数

标签 统计

autofac ×1

multithreading ×1

sql ×1

sql-server-2008 ×1