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

本文关键字:实例 返回 Ninject Factory 配置 | 更新日期: 2023-09-27 17:53:03

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

这是我的一个服务与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扩展。

是否有可能使IMyContextFactory每次都返回相同的IMyContext实例?

的背景

最初我是直接注入IMyDbContext到服务没有工厂,我有这个InRequestScope()由我的ASP初始化。. NET MVC网站。

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

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

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

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

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

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