gpt4 book ai didi

c# - Ninject: Controller 的实体上下文

转载 作者:太空狗 更新时间:2023-10-29 23:17:07 25 4
gpt4 key购买 nike

我知道已经提出了一千零一个与此主题相关的问题,但我已经回答了至少一打,但仍无法将这些问题联系起来。我正在尝试为实体上下文设置依赖注入(inject)。

我总是像在 MS 教程中看到的那样创建我的实体上下文,如下所示:

public class UserController : Controller
{
private DbEntities db = new DbEntities();

}

最近的阅读告诉我,这不再是(如果曾经是)最佳实践,应该使用依赖注入(inject)方法。 Ninject 经常被提及,但我看到你如何从我所拥有的转向 Ninject documentation 中给出的示例。 .

完成后应该是这样的吧?

public class UserController : Controller
{
private DbEntities db;

public UserController(DbEntities context)
{
db = context;
}
}

文档以“在上一步中我们已经准备好 Controller 注入(inject)所需的一切”开头。这真是令人困惑,因为上一步是安装。我使用 Nuget 方法安装,但我不知道它说“现在加载你的模块或在 RegisterServices 方法中定义绑定(bind)”是什么意思。我该怎么做,实体是模块还是绑定(bind)?感觉文档太少了。

很抱歉,如果我跳过了文档中的一些关键内容,我已经在论坛之间来回奔波了几个小时,试图弄清楚这一步骤。

最佳答案

I used the Nuget method to install, but I don't know what it means when it says "Now load your modules or define bindings in RegisterServices method." How do I do that, and is entity a module or a binding?

Nuget 安装实际上已经为您做了很多事情。最重要的是它将 Ninject 设置为 Controller 工厂,这意味着 Ninject 将创建您的 Controller 并能够传递您向其注册的所有依赖项。

如果您检查 App_Start 文件夹,您将找到一个文件 NinjectMVC3.cs。已经有一个空方法 RegisterServices(),您可以使用它来注册您的依赖项。

对于您的示例,您必须能够解析 DbEntities。最简单最基本的方法是:

kernel.Bind<DbEntities>().ToSelf();

也就是说,您确实应该将接口(interface)传递给 Controller ​​,以便 Controller 不依赖于 Entity Framework ,使用抽象和注册具体类以在 IoC 容器中使用是依赖注入(inject)的主要原因之一。

这应该给您一个开始 - 您链接到的文档似乎有点过时了。我建议查看 Ninject MVC3 sample在 github 上。

关于c# - Ninject: Controller 的实体上下文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9245511/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com