Вопрос

Я использую 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 Собственность нулевой, когда я пытаюсь получить доступ к нему в контроллере. Однако, если я изменим код на это вместо этого:

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

Тогда это работает нормально. Кто-нибудь знает, почему инъекция конструктора не работает, но инъекция имущества?

Это было полезно?

Решение

Попробуйте удалить ParamEmerless Constructor.

Ninject может выбирать не тот конструктор для разрешения.

Чтобы проверить его, вы можете поставить точку останова в обоих конструкторах, так и посмотреть, какие огненные пожары, но у меня есть ощущение, что это параметра.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top