Web API + Unity - 引用对象 dbcontext 已经实例化

Web API + Unity - Reference object dbcontext already instantiated

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

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

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

问题是,我有一个方法使用两个不同的对象,这些对象应该被引用到同一个数据库实例,但看起来 Unity 在每次注入中都创建了一个新的数据库对象实例。

查询 LINQ 示例:

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

_db1 和 _db2 引用相同的数据库对象,如下所示

    DB _db = null;

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

所以我收到以下错误:

The query contains references to items defined on a different data context

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

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

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

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