ninject.web.mvc附加件不使用ASP.NET MVC 2
题
我正在使用 Ninject.Web.Mvc
(MVC 2版本)加上ASP.NET 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; }
然后它可以正常工作。有谁知道为什么构造仪注入不起作用,但是物业注入是?
解决方案
尝试删除无参数构造函数。
ninject可能会选择错误的构造函数来解决。
为了测试它,您可以在两个构造函数中放置一个断点,然后看看哪个火灾,但我觉得这是无参数的。
不隶属于 StackOverflow