相关疑难解决方法(0)

每个网络请求一个DbContext ...为什么?

我一直在阅读很多文章,解释如何设置实体框架,DbContext以便每个HTTP Web请求只使用各种DI框架创建和使用一个.

为什么这首先是一个好主意?使用这种方法有什么好处?在某些情况下这是个好主意吗?在使用DbContext存储库方法调用实例化s 时,您是否可以使用此技术执行某些操作?

c# asp.net entity-framework dependency-injection dbcontext

382
推荐指数
6
解决办法
9万
查看次数

Ninject InRequestScope回退到InThreadScope

在我的MVC3项目中,我已经在InRequestScope的基础上将我的内核设置为Ninject Entityframework上下文,这非常有效,但是我有一个后台运行器来执行一些工作流管理.

它每5分钟启动一个新线程,我将我的依赖项Ninject到这个线程中,如果我将范围更改为InThreadScipe,则会触发Dispose方法,但如果我将其更改回InRequestScope,则Dispose方法不会触发.

如果InRequestScope不可用,是否有退回InThreadScope的方法?

更新:刚刚得到一个关于这个问题的upvote,为什么不用一些额外的信息更新它.我认为Ninjects处理生命时间的方式有点过时了.其他IoC的子容器是Transient注册的对象,它们存放在整个子容器中,并在子容器处理时被丢弃.这是一种更简单的方法,例如Web API与上述方案之类的自定义工作程序相结合.

scope ninject

11
推荐指数
2
解决办法
3615
查看次数

Ninject 缓存对象,应该被处置,内存泄漏?

当 ninject 内的弱引用集合中没有对象被释放时,内存泄漏,我做错了什么或者 ninject 中是否存在巨大错误?

当 Kernal 被释放时,弱引用集合中的所有引用都会被释放,但是在这个循环中,即使没有来自代码的引用 - 内存也会爆炸。

public class Program
{
    private StandardKernel kernel;

    private static void Main(string[] args)
    {
        new Program().Run();
    }

    public void Run()
    {
        kernel = new StandardKernel(new NinjectSettings() { LoadExtensions = false });
        kernel.Bind<Root>().ToSelf();
        kernel.Bind<Foo>().ToSelf().InCallScope();

        while (true)
        {
            Process();

            Thread.Sleep(500);

            GC.Collect();
            GC.WaitForPendingFinalizers();
        }
    }

    public void Process()
    {
        Root root = kernel.Get<Root>();
        Root root2 = kernel.Get<Root>();
    }

    public class Root
    {
        private Foo _test;

        public Root(Foo foofac)
        {
            Id = Guid.NewGuid();
            _test = …
Run Code Online (Sandbox Code Playgroud)

c# ninject

5
推荐指数
1
解决办法
3418
查看次数