我在ASP.NET MVC2中使用了Ninject.Web.Mvc (MVC2版本)插件。
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的实例,并且配置为使用NHibernateRepository的一个具体实例。但是,这不起作用,每当我试图在控制器中访问Repository属性时,它都是空的。但是,如果我将代码改为这样:
[Inject]
public IRepository Repository { get; set; }那么它工作得很好。有人知道为什么构造函数注入不起作用,但属性注入起作用了吗?
发布于 2010-10-14 09:10:04
尝试删除无参数构造函数。
Ninject可能选择了错误的构造函数来解析。
为了测试它,你可以在两个构造函数中都设置一个断点,看看是哪一个触发的,但我有一种感觉,那就是无参数的那个。
https://stackoverflow.com/questions/3929303
复制相似问题