我们有一个使用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
}
}
有人知道为什么会出现错误,但仅限于实时环境吗?