C# 记录工厂在第二次呼叫时处理
我刚刚将我的一个ASP.NET核心项目更新为1.1版,从那以后,我得到了以下错误(第一次调用时工作正常,但在以下调用时失败) 无法访问已释放的对象 在以下行: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>(); }
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);
}
}