即使所有对象都可用,也无法使用 AutoFac 解析 Azure Service Fabric 服务
Cannot resolve Azure Service Fabric service with AutoFac even all objects are available
我正在尝试使用 Autofac 进行注入:
Unhealthy event: SourceId='System.RA', Property='ReplicaOpenStatus', HealthState='Warning', ConsiderWarningAsError=false.
Replica had multiple failures during open on _Node_0. API call: IStatelessServiceInstance.Open(); Error = Autofac.Core.DependencyResolutionException (-2146233088)
An error occurred during the activation of a particular registration. See the inner exception for details. Registration: Activator = ServiceFabricProxy (DelegateActivator), Services = [MYSERVICE.ServiceFabric.ServiceFabric], Lifetime = Autofac.Core.Lifetime.CurrentScopeLifetime, Sharing = None, Ownership = ExternallyOwned ---> An error occurred during the activation of a particular registration. See the inner exception for
at Autofac.Core.Resolving.InstanceLookup.Activate(IEnumerable`1 parameters)
at Autofac.Core.Resolving.InstanceLookup.Execute()
at Autofac.Core.Resolving.ResolveOperation.GetOrCreateInstance(ISharingLifetimeScope currentOperationScope, IComponentRegistration registration, IEnumerable`1 parameters)
at Autofac.Core.Resolving.ResolveOperation.Execute(IComponentRegistration registration, IEnumerable`1 parameters)
at Autofac.ResolutionExtensions.TryResolveService(IComponentContext context, Service service, IEnumerable`1 parameters, Object& instance)
at Autofac.ResolutionExtensions.ResolveService(IComponentContext context, Service service, IEnumerable`1 parameters)
at Autofac.ResolutionExtensions.Resolve[TService](IComponentContext context, IEnumerable`1 parameters)
at Autofac.Integration.ServiceFabric.StatelessServiceFactoryRegistration.<>c__DisplayClass0_0`1.b__0(StatelessServiceContext context)
at Microsoft.ServiceFabric.Services.Runtime.StatelessServiceInstanceFactory.System.Fabric.IStatelessServiceFactory.CreateInstance(String serviceTypeName, Uri serviceName, Byte[] initializationData, Guid partitionId, Int64 instanceId)
at System.Fabric.ServiceFactoryBroker.<>c__DisplayClass9_0.b__0(IStatelessServiceFactory factory, ServiceInitializationParameters initParams)
at System.Fabric.ServiceFactoryBroker.CreateHelper[TFactory,TReturnValue](IntPtr nativeServiceType, IntPtr nativeServiceName, UInt32 initializationDataLength, IntPtr nativeInitializationData, Guid partitionId, Func`3 creationFunc, Action`2 initializationFunc, ServiceInitializationParameters initializationParameters)
For more information see: http://aka.ms/sfhealth
这些错误总是令人沮丧,因为它们不会停止 Visual Studio!
public ServiceFabric(StatelessServiceContext context, ServiceLoggerFactory serviceLoggerFactory, ServiceConfiguration configuration)
: base(context)
{
Argument.IsNotNull(() => context);
Argument.IsNotNull(() => serviceLoggerFactory);
Argument.IsNotNull(() => configuration);
_log = serviceLoggerFactory.EnrichLoggerForStatelessServiceContext(this);
_log.Information($"Service constructed {GetType().FullName}");
}
我已验证构造函数中的 类 已被注册:
public class NodeAutofacModule : Module
{
protected override void Load(ContainerBuilder builder)
{
var assembly = typeof(GlobalAutofacModule).Assembly;
var appName = assembly.GetName().Name;
var appVersion = assembly.InformationalVersion();
builder.Register<ILogger>(container => LoggingHelper.ConfigureLogging(appName, appVersion))
.SingleInstance();
builder.RegisterType<ServiceLoggerFactory>()
.SingleInstance();
builder.RegisterType<ServiceConfiguration>()
.AsSelf()
.SingleInstance();
// TODO: Register services here
}
}
我发现当 AutoFac 无法解析构造函数时,使用起来真的很令人沮丧。
发生这种情况时,有什么方法可以获得更多信息吗?
我正在 Service Fabric 服务启动时创建我的容器。
保罗
Cut stacktrace in SF 错误真的很烦人。但是有一种方法可以获取错误的更多详细信息。配置容器后尝试以下操作:
using (var c = builder.Build())
{
var s = c.Resolve<ServiceFabric>();
}
因此您将能够访问完整的异常信息并能够指定问题。
我正在尝试使用 Autofac 进行注入:
Unhealthy event: SourceId='System.RA', Property='ReplicaOpenStatus', HealthState='Warning', ConsiderWarningAsError=false.
Replica had multiple failures during open on _Node_0. API call: IStatelessServiceInstance.Open(); Error = Autofac.Core.DependencyResolutionException (-2146233088)
An error occurred during the activation of a particular registration. See the inner exception for details. Registration: Activator = ServiceFabricProxy (DelegateActivator), Services = [MYSERVICE.ServiceFabric.ServiceFabric], Lifetime = Autofac.Core.Lifetime.CurrentScopeLifetime, Sharing = None, Ownership = ExternallyOwned ---> An error occurred during the activation of a particular registration. See the inner exception for
at Autofac.Core.Resolving.InstanceLookup.Activate(IEnumerable`1 parameters)
at Autofac.Core.Resolving.InstanceLookup.Execute()
at Autofac.Core.Resolving.ResolveOperation.GetOrCreateInstance(ISharingLifetimeScope currentOperationScope, IComponentRegistration registration, IEnumerable`1 parameters)
at Autofac.Core.Resolving.ResolveOperation.Execute(IComponentRegistration registration, IEnumerable`1 parameters)
at Autofac.ResolutionExtensions.TryResolveService(IComponentContext context, Service service, IEnumerable`1 parameters, Object& instance)
at Autofac.ResolutionExtensions.ResolveService(IComponentContext context, Service service, IEnumerable`1 parameters)
at Autofac.ResolutionExtensions.Resolve[TService](IComponentContext context, IEnumerable`1 parameters)
at Autofac.Integration.ServiceFabric.StatelessServiceFactoryRegistration.<>c__DisplayClass0_0`1.b__0(StatelessServiceContext context)
at Microsoft.ServiceFabric.Services.Runtime.StatelessServiceInstanceFactory.System.Fabric.IStatelessServiceFactory.CreateInstance(String serviceTypeName, Uri serviceName, Byte[] initializationData, Guid partitionId, Int64 instanceId)
at System.Fabric.ServiceFactoryBroker.<>c__DisplayClass9_0.b__0(IStatelessServiceFactory factory, ServiceInitializationParameters initParams)
at System.Fabric.ServiceFactoryBroker.CreateHelper[TFactory,TReturnValue](IntPtr nativeServiceType, IntPtr nativeServiceName, UInt32 initializationDataLength, IntPtr nativeInitializationData, Guid partitionId, Func`3 creationFunc, Action`2 initializationFunc, ServiceInitializationParameters initializationParameters)
For more information see: http://aka.ms/sfhealth
这些错误总是令人沮丧,因为它们不会停止 Visual Studio!
public ServiceFabric(StatelessServiceContext context, ServiceLoggerFactory serviceLoggerFactory, ServiceConfiguration configuration)
: base(context)
{
Argument.IsNotNull(() => context);
Argument.IsNotNull(() => serviceLoggerFactory);
Argument.IsNotNull(() => configuration);
_log = serviceLoggerFactory.EnrichLoggerForStatelessServiceContext(this);
_log.Information($"Service constructed {GetType().FullName}");
}
我已验证构造函数中的 类 已被注册:
public class NodeAutofacModule : Module
{
protected override void Load(ContainerBuilder builder)
{
var assembly = typeof(GlobalAutofacModule).Assembly;
var appName = assembly.GetName().Name;
var appVersion = assembly.InformationalVersion();
builder.Register<ILogger>(container => LoggingHelper.ConfigureLogging(appName, appVersion))
.SingleInstance();
builder.RegisterType<ServiceLoggerFactory>()
.SingleInstance();
builder.RegisterType<ServiceConfiguration>()
.AsSelf()
.SingleInstance();
// TODO: Register services here
}
}
我发现当 AutoFac 无法解析构造函数时,使用起来真的很令人沮丧。
发生这种情况时,有什么方法可以获得更多信息吗?
我正在 Service Fabric 服务启动时创建我的容器。
保罗
Cut stacktrace in SF 错误真的很烦人。但是有一种方法可以获取错误的更多详细信息。配置容器后尝试以下操作:
using (var c = builder.Build())
{
var s = c.Resolve<ServiceFabric>();
}
因此您将能够访问完整的异常信息并能够指定问题。