Autofac说类型未注册,仅在一种环境下发生

时间:2020-01-10 09:57:31

标签: c# .net autofac

我们有一个使用Topshelf的Windows服务。使用它,我们正在检查是否从消息队列中获取消息,然后发送邮件。它可以在我的本地计算机,内部测试环境和外部测试环境上运行。 但是,当我将其部署到实时环境中时,在日志中看到我们在解决ISmtpMailService方面遇到了异常。

我收到下面的错误

An unhandled exception occurred while processing a registered user 0280ceb3-373f-4a3b-95ca-95e0cc23009a:
Autofac.Core.Registration.ComponentNotRegisteredException: The requested service 
'Mail.SMTP.Services.ISmtpMailService' has not been registered. To avoid this exception, either register
a component to provide the service, check for service registration using IsRegistered(), or use the 
ResolveOptional() method to resolve an optional dependency. at 
Autofac.ResolutionExtensions.ResolveService(IComponentContext context, Service service, IEnumerable`1 parameters) at 
Autofac.ResolutionExtensions.Resolve[TService](IComponentContext context, IEnumerable`1 parameters) at 
Autofac.ResolutionExtensions.Resolve[TService](IComponentContext context) at 
Web.Identity.QueueMonitor.MQ.QueueMonitor.<sendRegistrationConfirmationAsync>d__3.MoveNext() in 
D:\TeamCity\buildAgent\work\6d5b3b1d63a0a2d4\Web\Web.Identity.QueueMonitor\MQ\QueueMonitor.cs:line 94 --- End of stack trace from previous location where exception was thrown --- at 
System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at 
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at 
System.Runtime.CompilerServices.TaskAwaiter.GetResult() at 
QueueMonitor.MQ.QueueMonitor.ReceivedHandler(Object sender, BasicDeliverEventArgs e) in 
D:\TeamCity\buildAgent\work\6d5b3b1d63a0a2d4\Web\Web.Identity.QueueMonitor\MQ\QueueMonitor.cs:line 65

然后我有注册Autofac容器的方法

        private static IContainer getContainer()
        {
            var builder = new ContainerBuilder();

            // Register Services from the BLL our application needs to function.
            registerServices(builder);

            // Build and return the container.
            return builder.Build();
        }

        private static void registerServices(ContainerBuilder builder)
        {

            // Register default mailclients
            builder.RegisterType<SmtpClient>().As<ISmtpClient>().SingleInstance();

            // Register base mailservices
            builder.RegisterType<SmtpMailService>().As<ISmtpMailService>().SingleInstance();
        }

最后,当我们从队列中收到消息时,我调用一个方法,该方法尝试解析ISmtpMailService。

        private static async Task sendRegistrationConfirmationAsync(MessageUserRegistered userRegistered)
        {
            using (var scope = getContainer().BeginLifetimeScope())
            {
                var mailService = scope.Resolve<ISmtpMailService>();

                // Extracted, sending mail here
           }
        }

有人知道为什么会出现错误,但仅限于实时环境吗?

0 个答案:

没有答案
相关问题