我正在使用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; }
然后它工作正常。有谁知道为什么构造函数注入不起作用,但属性注入是?
答案 0 :(得分:1)
尝试删除无参数构造函数。
Ninject可能会选择错误的构造函数来解决。
为了测试它,你可以在两个构造函数中放置一个断点并查看哪一个触发,但我感觉它是无参数的。