1

我正在使用 MVC4 开始一个新项目,并想使用依赖注入。我过去没有使用过它,但现在似乎是使用它的好时机。

谁能告诉我哪些 DI 工具现在支持 MVC4,哪些现在提供最简单的设置。我的需求相当简单,因为项目很小。对我来说最重要的是一个易于学习和配置的系统。

4

3 回答 3

5

我在 MVC 4 Beta 项目中成功使用了 Ninject.MVC3 NuGet 包。

// Global.asax.cs

public static void Configure(HttpConfiguration config)
{
    var kernel = new StandardKernel();
    RegisterServices(kernel);

    // For ApiControllers
    config.ServiceResolver.SetResolver(
        t => kernel.TryGet(t),
        t => kernel.GetAll(t));

    // For Controllers
    DependencyResolver.SetResolver(
        t => kernel.TryGet(t),
        t => kernel.GetAll(t));
}

public static void RegisterServices(IKernel kernel)
{
    kernel.Bind<IRepository>().To<Repository>();
}

protected void Application_Start()
{
    ...

    Configure(GlobalConfiguration.Configuration);
}
于 2012-02-18T22:54:29.197 回答
2

我不知道 MVC 4(我只是还没有机会玩它)但我会推荐 Ninject 作为 DI 容器。您可能只需在您的解决方案中安装 Ninject MVC3 项目(来自 nuget),它可能只适用于 MVC4 如果不使用:

DependencyResolver.SetResolver(new NinjectDependencyResolver(myKernal));     

这是关于这里的博客http://blogs.microsoft.co.il/blogs/gilf/archive/2010/10/17/dependency-injection-in-mvc-3-was-made-easier.aspx

博客文章适用于统一,但对于 Ninject 几乎相同,实现一个依赖解析器来包装 ninject 并将其放入 global.ascx 文件

于 2011-12-23T05:16:57.720 回答
0

由于某种原因,使用 NinjectDependencyResolver 的 Ninject 不适用于 MVC4(开发人员预览版)。

我使用另一个重载的 SetResolver 解决了它,它采用两个匿名函数来解决依赖关系。

IKernel kernel = new StandardKernel();    
kernel.Bind<...>().To(...);
DependencyResolver.SetResolver( t => kernel.Get(t), t => kernel.GetAll(t) );
于 2012-01-25T00:14:04.387 回答