我正在使用 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可能会选择错误的构造函数来解决。

为了测试它,您可以在两个构造函数中放置一个断点,然后看看哪个火灾,但我觉得这是无参数的。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top