c# - LoggingFactory 在第二次调用时处理

标签 c# logging asp.net-core dryioc

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

无法访问已处置的对象。

在下面一行:

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

该项目使用 DryIoc 作为容器,我的启动看起来像这样:

    using System;
using DryIoc;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using DryIoc.Microsoft.DependencyInjection;

namespace WebApplication2
{
    public class CompositionRoot
    {
        public CompositionRoot(IRegistrator r){}
    }

    public class Startup
    {
        public Startup(IHostingEnvironment env)
        {
            var builder = new ConfigurationBuilder()
                .SetBasePath(env.ContentRootPath)
                .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
                .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
                .AddEnvironmentVariables();
            Configuration = builder.Build();
        }

        public IConfigurationRoot Configuration { get; }

        // This method gets called by the runtime. Use this method to add services to the container.
        public IServiceProvider ConfigureServices(IServiceCollection services)
        {
            // Add framework services.
            services.AddMvc().AddControllersAsServices();
            return new Container()
            // setup DI adapter
            .WithDependencyInjectionAdapter(services,
                // optional: propagate exception if specified types are not resolved, and prevent fallback to default Asp resolution
                throwIfUnresolved: type => type.Name.EndsWith("Controller"))
            // add registrations from CompositionRoot classs
            .ConfigureServiceProvider<CompositionRoot>();
        }

        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
        {
            loggerFactory.AddConsole(Configuration.GetSection("Logging"));
            loggerFactory.AddDebug();

            app.UseMvc();
        }
    }
}

我的 project.json 看起来像这样:

  {
"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%" ]
  }

任何帮助将不胜感激

最佳答案

将 CompositionRoot 替换为

    public class CompositionRoot
    {
        public CompositionRoot(IRegistrator r)
        {
            r.Unregister<ILoggerFactory>();
            r.Register<ILoggerFactory, LoggerFactory>(Reuse.Singleton);
        }
    }

附言已找到您的票https://bitbucket.org/dadhi/dryioc/issues/432/loggingfactory-disposed-on-second-call .

关于c# - LoggingFactory 在第二次调用时处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41665746/

相关文章:

c# - 带有新行的 TextAreaFor 导致内部异常

c# - .NET 中的安全 Azure 移动服务 - 如何获取 userId

c# - 为什么我的 StreamWriter 不写入文件?

powershell - 通过GPO设置事件日志设置

c# - 将 Mat 转换为适用于 Android 的 MemoryStream OpenCV

c# - FileStream 锁定文件以进行读写

tomcat - 如何在命令行帮助下检查tomcat服务器中的 Activity 日志?

c# - 在 ASP.Core MVC 中使用用户名和密码设置连接字符串

iis-express - 使用 VS2015 和 IIS Express 覆盖站点绑定(bind)

visual-studio - ASP .NET Core Web 服务器控制台输出在 VS for .NET Core 2.2 中不可见