Kye*_*ica 5 c# dependency-injection ninject entity-framework-4.1 asp.net-mvc-3
我知道有人提出了一千零一个与这个话题有关的问题,但我至少经历了十几个问题,但仍然没有联系到这些问题.我正在尝试为实体上下文设置依赖注入.
我总是创建我的实体上下文,就像我在MS教程中看到的那样,如下所示:
public class UserController : Controller
{
private DbEntities db = new DbEntities();
}
Run Code Online (Sandbox Code Playgroud)
最近的阅读告诉我,这不再是(如果有的话)最佳实践,应该使用依赖注入方法.Ninject经常被提及,但我看到你如何从我拥有的东西转移到Ninject文档中的示例.
我完成后应该看起来像这样,对吧?
public class UserController : Controller
{
private DbEntities db;
public UserController(DbEntities context)
{
db = context;
}
}
Run Code Online (Sandbox Code Playgroud)
文档以"在上一步中我们已准备好控制器注入所需的任何内容"开始.因为上一步是安装,所以这很混乱.我使用Nuget方法进行安装,但是当我说"现在加载模块或在RegisterServices方法中定义绑定"时,我不知道它意味着什么.我该怎么做,实体是模块还是绑定?文档感觉很稀疏.
我很抱歉,如果我跳过文档中的一些重要内容,我已经在论坛之间徘徊数小时试图弄清楚这一步.
我使用 Nuget 方法进行安装,但我不知道“现在加载模块或在 RegisterServices 方法中定义绑定”是什么意思。我该如何做到这一点,实体是模块还是绑定?
Nuget 安装实际上已经为您做了很多事情。最重要的是,它将 Ninject 设置为控制器工厂,这意味着 Ninject 将创建您的控制器,并能够传入您注册的所有依赖项。
如果您检查 App_Start 文件夹,您会发现一个文件NinjectMVC3.cs。已经有一个空方法RegisterServices()可用于注册您的依赖项。
对于您的示例,您必须能够解决DbEntities. 最简单最基本的方法是:
kernel.Bind<DbEntities>().ToSelf();
Run Code Online (Sandbox Code Playgroud)
也就是说,您确实应该向控制器传递一个接口,以便控制器不依赖于实体框架,使用抽象并注册一个具体类以在 IoC 容器中使用是依赖注入的主要原因之一。
这应该给您一个开始 - 您链接到的文档似乎有点过时。我建议查看github 上的Ninject MVC3 示例。
| 归档时间: |
|
| 查看次数: |
1947 次 |
| 最近记录: |