Web API + Unity - 已实例化参考对象dbcontext

时间:2015-11-12 18:47:41

标签: c# linq asp.net-web-api dependency-injection unity-container

我正在使用Unity进行依赖注入。

我有一个负责实例化数据库对象的方法如下:

        container.RegisterType<DB>(
            new InjectionFactory(c =>
            {
                return new DB();
            })
        );

问题是,我有一个方法,它使用两个不同的对象,这些对象被引用来引用同一个数据库实例,但看起来就像Unity在每次注入时都在创建一个新的DB Object实例。

查询LINQ示例:

var test = from tb1 in _db1.method()
           join tb2 in _db2.method() on tb1.code equals tb2.code

_db1和_db2引用相同的DB对象,如下所示

    DB _db = null;

    public db1(DB dataContext)
    {
        _db = dataContext;
        _db.CommandTimeout = 3600;
    }

所以我收到以下错误:

  

查询包含对在不同数据上下文中定义的项的引用

有人可以帮我修复Unity寄存器以引用已经实例化的DB对象,而不是每次都做一个新的吗?

1 个答案:

答案 0 :(得分:1)

您应该将数据库注册为容器中的单例,这意味着每次请求数据库时都会返回相同的实例,这样:

container.RegisterType<DB>(new ContainerControlledLifetimeManager())

应该这样做,如果这是一个Web应用程序,您应该为每个请求创建一个子容器,有不同的方法来执行此操作,但您可能想尝试https://www.nuget.org/packages/Unity.Mvc4/