Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Ninject垃圾收集_C#_Garbage Collection_Ninject - Fatal编程技术网

C# Ninject垃圾收集

C# Ninject垃圾收集,c#,garbage-collection,ninject,C#,Garbage Collection,Ninject,我正在n层应用程序中使用Ninject,该应用程序由服务、存储库组成,所有这些都与UnitOfWork模式和Ninject连接在一起。此外,我有不同的作业在引用这些服务和存储库的不同线程中执行 我偶尔会遇到一个异常,导致执行作业的控制台应用程序崩溃。例外情况是: Application: Playground.exe Framework Version: v4.0.30319 Description: The process was terminated due to an unhandled

我正在n层应用程序中使用Ninject,该应用程序由服务、存储库组成,所有这些都与UnitOfWork模式和Ninject连接在一起。此外,我有不同的作业在引用这些服务和存储库的不同线程中执行

我偶尔会遇到一个异常,导致执行作业的控制台应用程序崩溃。例外情况是:

Application: Playground.exe
Framework Version: v4.0.30319
Description: The process was terminated due to an unhandled exception.
Exception Info: System.NullReferenceException
Stack:
   at Ninject.Activation.Caching.GarbageCollectionCachePruner.PruneCacheIfGarbageCollectorHasRun(System.Object)
   at System.Threading.ExecutionContext.runTryCode(System.Object)
   at System.Runtime.CompilerServices.RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup(TryCode, CleanupCode, System.Object)
   at System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)
   at System.Threading._TimerCallback.PerformTimerCallback(System.Object)
据我所知,这与Ninject中的新缓存和集合管理有关。但是,我没有为任何Ninject绑定指定任何作用域

编辑:代码示例:

以下是使用的一些代码(我相信是关键部分):

我希望这些样品很方便

编辑2


我发现了问题,这完全是我的错。由于我遇到了一些范围界定和处理问题,我修改了代码,以便以上面提到的方式进行处理(true)。这打乱了Ninject的缓存机制。我重新实现了大部分代码,没有问题。不过,谢谢你的想法。

没有代码真的不可能说任何事情。OP:Daniel Hilgarth iis想说的是,你能发布一些该来源的摘录吗(来自gitHub)。就我个人而言,我建议你自己查看源代码——它很整洁,你会发现不管你是否直接使用它,修剪的东西总是会被初始化。这很可能是你的线程,你可能有一个线程将注入的属性或对象设置为null,而ninject现在正试图将其从缓存中删除。沿着这些思路,但我只是在暗中摸索。@Ruben:呃,不,这不是我想说的。我想看看他的密码。我对Ninject代码不感兴趣,因为我认为这不是问题所在。问题:这与您的问题并不相关,但我想知道为什么每个工作单元都需要不同的内核?您使用的是哪个ninject版本?
    public class DefaultUnitOfWork<TObjectContext> : Provider<ObjectContext>, IUnitOfWork, IServiceUnitOfWork
        where TObjectContext : ObjectContext, new()
      {
        public DefaultUnitOfWork(){
          _kernel = new CustomKernel(new CommonRepositoryModule(), new        ServiceModule(), (NinjectModule)kernel.Get<IAmApplicationSpecificModule>());
        }
    }
    public void Dispose()
    {
      if (_kernel != null) _kernel.Dispose(true); 
    }