不能与AutoFac解决Azure的服务织物服务甚至是所有的对象都可以

问题描述 投票:0回答:1

我试图使用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很无奈与当它无法解析的构造函数的工作。

有什么方法来获得更多的信息,当这种情况发生?

当我的服务织物服务启动时,我创造我的容器。

保罗

c# autofac azure-service-fabric
1个回答
1
投票

在SF错误切堆栈跟踪实在是烦人。但有一种方式来获得错误的详细信息。试试你的容器的配置后进行如下:

using (var c = builder.Build())
{
    var s = c.Resolve<ServiceFabric>();
}

因此,你会得到访问完整的异常信息,并能指出问题。

© www.soinside.com 2019 - 2024. All rights reserved.