Asp. Потерян чистое значение частного члена MVC

Я для жереха. Ne MVC Я использую архитектуру N_layrs (уровни удобства, обслуживания, проверки, данных и предварительной печати). Я создал контроллер для просмотра некоторых данных. Я реализовал интерфейс представления для контроллера и использовал метод отображения (этот метод будет извлекать данные из системных уровней и вызывать метод интерфейса представления, чтобы передать мне значение) в реализованном методе интерфейса, который я назначаю переменной back items для локальная частная переменная, но когда я назначаю этот список методу View, значение будет нулевым.

    public class AgreementController : Controller, IListView<IList<AgreementModel>>
{
    private static ListPresenter<AgreementModel> _agreementListPresenter;

//This is the private member
    private IList<AgreementModel> _items;
    public RequestType RequestType
    {
        get
        {
            return RequestType.FindAll;
        }
    }

    public string ListErrorMessage
    {
        set
        {
        }
    }

    // GET: Agreement
    public ActionResult Index()
    {
    //Some unity code for DI
        IUnityContainer unityContainer = new UnityContainer();
        unityContainer.RegisterType<IListView<IList<AgreementModel>>, AgreementController>();
        unityContainer.RegisterType<Service<IBusinessService<AgreementModel>, AgreementModel>>();
        unityContainer.RegisterType<IBusinessService<AgreementModel>, BusinessService<AgreementModel>>();
        unityContainer.RegisterType<IRepository<AgreementModel>, AgreementRepository>();
        unityContainer.RegisterType<Service<IBusinessService<PlanModel>, PlanModel>>();
        unityContainer.RegisterType<IBusinessService<PlanModel>, BusinessService<PlanModel>>();
        unityContainer.RegisterType<IRepository<PlanModel>, PlanRepository>();
        unityContainer.RegisterType<IValidator<AgreementModel>, AgreementValidator<AgreementModel>>();
        unityContainer.RegisterType<IValidator<PlanModel>, PlanValidator<PlanModel>>();

    //Create the Presenter this will fire DisplayList
    _agreementListPresenter = unityContainer.Resolve<ListPresenter<AgreementModel>>();
        _agreementListPresenter.Display();
    //The value here is NULL
        return View(_items);
    }

    public void DisplayList(IList<AgreementModel> items)
    {
    //I recieved vale here and it is OK
        _items = items;
    }
}

}

This solved my issue

unityContainer.RegisterInstance<IListView<IList<AgreementModel>>>(this);

By this I regester the current controller object insted of createing new one

Вместо описания кода разместите фактический код.

Peter Bons 22.04.2018 18:43

Пожалуйста, разместите свой код. Без кода сложно определить проблему.

CodingYoshi 22.04.2018 18:43

Я добавил код

Alejandro 22.04.2018 19:24

у меня глаза горят !!!! удалите код !!! удалите код !!!!

Ewan 22.04.2018 19:25

@ Эван Почему? Пожалуйста, объясни

Alejandro 22.04.2018 19:27
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
5
89
1

Ответы 1

Быстрый ответ.

Похоже, вы создаете экземпляр нового AgreementController через Unity, который предположительно устанавливает свой собственный список элементов где-то в вашем миллионе классов.

Но View отправляет список элементов из вызванного вами контроллера. Не тот, который вы создали.

Длинный ответ.

Вам следует переместить весь код внедрения зависимостей в точку запуска приложения или Global.ascx. Он вызывается при запуске приложения, а не при запросе страницы.

У вашего AgreementController должен быть конструктор с параметрами необходимых ему служб. Unity создаст контроллер и внедрит службы, которые вы зарегистрировали в global.ascx.

Спасибо за Ваш ответ. Я уже называю единство глобальным. Asax, но я добавил его сюда, чтобы объяснить, что происходит в скрытом коде. Что мне интересно, так это то, что значение потеряно после вызова. Я получил его в DisplayList (это вызвано после _agreementListPresenter.Display ())

Alejandro 22.04.2018 19:42

может, тогда разместите свой код действительный? но я все еще думаю, что это та же проблема, вы находитесь в контроллере A и вызываете метод на контроллере B

Ewan 22.04.2018 20:01

Я думаю, мне нужно передать текущий контроллер на уровень представления, который я сделал здесь (unityContainer.RegisterType <IListView <IList <AgreementModel> ‌>, AgreementController> ();), но он создает новый объект контроллера. Как я могу передать объект контроллера curren (this) через единство нового объекта?

Alejandro 22.04.2018 20:37

следуйте моим инструкциям и вставьте службы в контроллер с помощью конструктора. не используйте .Resolve когда-либо

Ewan 22.04.2018 20:43

Я нашел метод под названием RegisterInstance, и он отлично работает с моим кодом ... Не могли бы вы объяснить, почему мне не следует использовать Resolve? и если я не использую его, как я могу воспользоваться преимуществом единства?

Alejandro 22.04.2018 20:52

unity автоматически разрешает контроллеры, когда они нужны.

Ewan 22.04.2018 20:56

Но я не разрешаю контроллер, я разрешаю объект ListPresenter

Alejandro 22.04.2018 20:58

почему вы со мной спорите? попробуй это

Ewan 22.04.2018 20:59

Другие вопросы по теме