我希望将数据库上下文注入到实现我的接口similar to this post的所有类中。
我有什么
public abstract class Service
{
public Service(Context context)
{
Context = context;
}
public Context Context { get; }
}
每个服务类都有一个带方法的接口
interface IRecipeTypeIndexService
{
IEnumerable<RecipeType> GetAll();
}
所有服务类都将继承抽象Service
类,所以我目前的具体类看起来像
public class RecipeTypesIndexService : Service, IRecipeTypeIndexService
{
public RecipeTypesIndexService(Context context) : base(context)
{
}
public IEnumerable<RecipeType> GetAll()
{
return Context.RecipeTypes.AsEnumerable();
}
}
我的ninject绑定看起来像
Kernel.Bind<DbContext>().ToSelf().InRequestScope();
Kernel.Bind<Service>().ToSelf().InRequestScope();
我想要做的就是让我的接口IRecipeTypeIndexService
和我创建的其他服务接口继承另一个接口IService
,它是Ninject绑定到抽象Service
类,所以实现IWhateverService
的所有具体类必须有一个构造函数,它将数据库上下文注入基类,所以我的具体类看起来像这样:
public class RecipeTypesIndexService : IRecipeTypeIndexService
{
public RecipeTypesIndexService(Context context) : base(context)
{
}
public IEnumerable<RecipeType> GetAll()
{
return Context.RecipeTypes.AsEnumerable();
}
}
这可能吗?这是我第一次使用Ninject,而且我是使用依赖注入的新手。
答案 0 :(得分:0)
<强>更新强>
事后我意识到这是不可能的。
因为我已经设置了Ninject,所以在构造函数中的任何地方都有一个已经初始化的上下文,我不需要抽象类。
我的服务类将如下所示:
public class RecipeTypesIndexService : IRecipeTypeIndexService
{
private Context context { get; }
public RecipeTypesIndexService(Context context) : base(context)
{
this.context = context;
}
public IEnumerable<RecipeType> GetAll()
{
return context.RecipeTypes.AsEnumerable();
}
}
我根本不需要抽象基类。