• 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏吧

使用接口将数据库上下文注入到类中

c/c++ 来源:Omar.Ebrahim 4次浏览

我期待将数据库上下文注入到实现我的接口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,并且我是使用依赖注入的新手。


===========解决方案如下:

UPDATE

我事后知道这是不可能的事情。

正如我设置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(); 
    } 
} 

我并不需要一个抽象基类的。


版权声明:本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系管理员进行删除。
喜欢 (0)