每次将 Ninject 工厂配置为 return 同一个实例

Configure Ninject Factory to return the same instance every time

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

这是我的一项服务的示例,它具有 IMyContextFactory 依赖项,此 return 是 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到return每次都是IMyContext的同一个实例?

背景

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

但现在我也在 Windows 服务中使用它,我不希望我的 DbContext 由于频繁循环而变得臃肿。我也不希望我的服务 new 针对每个请求进行调整,所以这就是为什么我认为服务中的工厂可以解决问题。

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

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

我的看法是,您必须使用单例生命周期类型注册 IMyContext 具体类型。

(但根据 Erik Fukenbusch 的评论,不破坏上下文似乎不是一个好主意)