我有一个我正在重用的服务层(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服务提供了单独的配置 - 这就是我每次从工厂获得单例的方式。
答案 0 :(得分:1)
我并不完全熟悉Ninject,但根据此页面https://github.com/ninject/Ninject.Extensions.Factory/wiki/Factory-interface,工厂返回的实例似乎是从IResolutionRoot
检索的。
我的看法是你必须用单身生命周期类型注册你的IMyContext具体类型。
(但根据Erik Fukenbusch的评论,似乎不要破坏你的背景并不是一个好主意)