配置Ninject Factory每次都返回相同的实例

时间:2015-06-03 08:45:15

标签: c# entity-framework ninject ninject-extensions

我有一个我正在重用的服务层(AKA业务层)。

以下是我的一个具有IMyContextFactory依赖关系的服务的示例,它返回IMyContext的实例。

public class MyService : IMyService 
{
    private IMyContextFactory DbContextFactory;

    public MyService(IMyContextFactory dbContextFactory)
    {
        this.DbContextFactory = dbContextFactory;
    }

    public DoSomething(int id)
    {
        // Get instance of the db for use
        IMyContext dbContext = this.DbContextFactory.CreateMyDbContext();

        // Use the business layer for something
        var user = dbContext.Set<User>().Find(id);
    }
}

我正在使用Ninject Factory extension

是否可以让IMyContextFactory每次都返回IMyContext的同一个实例?

背景

最初我是在没有工厂的情况下直接将IMyDbContext注入服务中,并且在我的ASP.NET MVC网站初始化时我有InRequestScope()

但是现在我也在Windows服务中使用它的服务,我不希望我的DbContext因频繁循环而变得臃肿。我不希望我的服务也被new用于每个请求,所以这就是为什么我认为服务中的工厂会做到这一点。

我每次都需要最好的InRequestScope()和一个新实例,具体取决于配置。我已经为ASP.NET和Windows服务提供了单独的配置 - 这就是我每次从工厂获得单例的方式。

1 个答案:

答案 0 :(得分:1)

我并不完全熟悉Ninject,但根据此页面https://github.com/ninject/Ninject.Extensions.Factory/wiki/Factory-interface,工厂返回的实例似乎是从IResolutionRoot检索的。

我的看法是你必须用单身生命周期类型注册你的IMyContext具体类型。

(但根据Erik Fukenbusch的评论,似乎不要破坏你的背景并不是一个好主意)