Ninject.Web.Mvc加载项不能与ASP.NET MVC 2一起使用

时间:2010-10-14 01:03:58

标签: dependency-injection inversion-of-control ninject ninject-2 ninject-extensions

我正在使用ASP.NET MVC 2的Ninject.Web.Mvc(MVC 2版本)插件。这是我Global.asax.cs的摘录:

protected override void OnApplicationStarted()
{
    AreaRegistration.RegisterAllAreas();
    RegisterRoutes(RouteTable.Routes;
    // RegisterAllControllersIn() is not available in the MVC 2 version of Ninject
}

protected override IKernel CreateKernel()
{
    var kernel = new StandardKernel();
    kernel.Bind<IRepository>().To<NHibernateRepository>();

    return kernel;
}

我还有一个基地RepositoryController

public class RepositoryController : Controller
{
    protected IRepository Repository { get; set; }

    public RepositoryController()
    {

    }

    public RepositoryController(IRepository repository)
    {
        Repository = repository;
    }
}

正如您所看到的,这是一个非常简单的设置,其中RepositoryController期望注入IRepository的实例,并且Ninject配置为使用NHibernateRepository的具体实例。但是,每当我尝试在控制器中访问它时,这都不起作用,Repository属性为null。但是,如果我将代码改为此代码:

[Inject]
public IRepository Repository { get; set; }

然后它工作正常。有谁知道为什么构造函数注入不起作用,但属性注入是?

1 个答案:

答案 0 :(得分:1)

尝试删除无参数构造函数。

Ninject可能会选择错误的构造函数来解决。

为了测试它,你可以在两个构造函数中放置一个断点并查看哪一个触发,但我感觉它是无参数的。