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

时间:2017-01-25 19:43:44

标签: c# inheritance dependency-injection ninject.web.mvc

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

1 个答案:

答案 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();
    }
}

我根本不需要抽象基类。