每次将 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 的评论,不破坏上下文似乎不是一个好主意)
我有一个正在重用的服务层(也称为业务层)。
这是我的一项服务的示例,它具有 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 的评论,不破坏上下文似乎不是一个好主意)