配置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,但根据此页面https://github.com/ninject/Ninject.Extensions.Factory/wiki/Factory-interface似乎工厂返回的实例是从IResolutionRoot
中检索的。
我的看法是,你必须用单例生命周期类型注册你的IMyContext具体类型。
(但根据Erik Fukenbusch的评论,不破坏上下文似乎不是一个好主意)