C# 记录工厂在第二次呼叫时处理

C# 记录工厂在第二次呼叫时处理,c#,logging,asp.net-core,dryioc,C#,Logging,Asp.net Core,Dryioc,我刚刚将我的一个ASP.NET核心项目更新为1.1版,从那以后,我得到了以下错误(第一次调用时工作正常,但在以下调用时失败) 无法访问已释放的对象 在以下行: private ILogger logger; public ValuesController(ILoggerFactory loggingFactory) { logger = loggingFactory.CreateLogger<ValuesController>(); }

我刚刚将我的一个ASP.NET核心项目更新为1.1版,从那以后,我得到了以下错误(第一次调用时工作正常,但在以下调用时失败)

无法访问已释放的对象

在以下行:

    private ILogger logger;
    public ValuesController(ILoggerFactory loggingFactory)
    {
        logger = loggingFactory.CreateLogger<ValuesController>();
    }
}


如果您有任何帮助,我们将不胜感激

将您的CompositionRoot替换为

    public class CompositionRoot
    {
        public CompositionRoot(IRegistrator r)
        {
            r.Unregister<ILoggerFactory>();
            r.Register<ILoggerFactory, LoggerFactory>(Reuse.Singleton);
        }
    }
public类CompositionRoot
{
公共合成根目录(IRegistrator r)
{
r、 注销();
r、 寄存器(重用。单例);
}
}
警察找到你的票了

问题已在中解决

问题是由于外部实例注册为瞬态。一次性实例由容器跟踪,但将与第一个作用域(请求)一起处理,因此将在第二个作用域(请求)中引发异常。现在它注册为singleton


顺便说一句,要找出问题或自定义DryIoc容器中的框架注册,您可以使用DependencyInjectionAdapter方法将
registerDescriptor
委托到
。DryIoc回购中的样本更新为

,看起来您使用的是
DryIoc
,它对Dispose行为有很多影响。你能确认你正在使用的版本吗?你可以在
project.json.lock
中确认版本,我已经从NuGet添加了DryIoc.dll 2.9.7,如果我在运行时检查是否使用了2.9.7,尽管我的project.json.lock仍然是2.8.3,但我不太确定如何正确获取project.json.lock。。。
  {
"dependencies": {
  "Microsoft.AspNetCore.Server.Kestrel": "1.1.0",
  "Microsoft.Extensions.Logging": "1.1.0",
  "Microsoft.Extensions.Configuration.Json": "1.1.0",
  "Microsoft.Extensions.Configuration.FileExtensions": "1.1.0",
  "Microsoft.AspNetCore.Mvc": "1.1.0",
  "Microsoft.AspNetCore.Routing": "1.1.0",
  "Microsoft.AspNetCore.Server.IISIntegration": "1.1.0",
  "Microsoft.AspNetCore.Server.IISIntegration.Tools": "1.1.0-preview4-final",
  "Microsoft.Extensions.Configuration.EnvironmentVariables": "1.1.0",
  "Microsoft.Extensions.Logging.Console": "1.1.0",
  "Microsoft.Extensions.Logging.Debug": "1.1.0",
  "Microsoft.Extensions.Options.ConfigurationExtensions": "1.1.0",
  "DryIoc.Microsoft.DependencyInjection": "1.0.2"
},
  "tools": {
  },
  "frameworks": {
      "netcoreapp1.1": {
          "dependencies": {
              "Microsoft.NETCore.App": {
                  "type": "platform",
                  "version": "1.1.0"
              }
          }
      }
  },
  "buildOptions": {
      "emitEntryPoint": true
  },
  "runtimeOptions": {
      "configProperties": {
          "System.GC.Server": true
      }
  },
  "scripts": {
      "postpublish": [ "dotnet publish-iis --publish-folder %publish:OutputPath% --framework %publish:FullTargetFramework%" ]
  }
    public class CompositionRoot
    {
        public CompositionRoot(IRegistrator r)
        {
            r.Unregister<ILoggerFactory>();
            r.Register<ILoggerFactory, LoggerFactory>(Reuse.Singleton);
        }
    }