Я для жереха. 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
Пожалуйста, разместите свой код. Без кода сложно определить проблему.
Я добавил код
у меня глаза горят !!!! удалите код !!! удалите код !!!!
@ Эван Почему? Пожалуйста, объясни





Быстрый ответ.
Похоже, вы создаете экземпляр нового AgreementController через Unity, который предположительно устанавливает свой собственный список элементов где-то в вашем миллионе классов.
Но View отправляет список элементов из вызванного вами контроллера. Не тот, который вы создали.
Длинный ответ.
Вам следует переместить весь код внедрения зависимостей в точку запуска приложения или Global.ascx. Он вызывается при запуске приложения, а не при запросе страницы.
У вашего AgreementController должен быть конструктор с параметрами необходимых ему служб. Unity создаст контроллер и внедрит службы, которые вы зарегистрировали в global.ascx.
Спасибо за Ваш ответ. Я уже называю единство глобальным. Asax, но я добавил его сюда, чтобы объяснить, что происходит в скрытом коде. Что мне интересно, так это то, что значение потеряно после вызова. Я получил его в DisplayList (это вызвано после _agreementListPresenter.Display ())
может, тогда разместите свой код действительный? но я все еще думаю, что это та же проблема, вы находитесь в контроллере A и вызываете метод на контроллере B
Я думаю, мне нужно передать текущий контроллер на уровень представления, который я сделал здесь (unityContainer.RegisterType <IListView <IList <AgreementModel> >, AgreementController> ();), но он создает новый объект контроллера. Как я могу передать объект контроллера curren (this) через единство нового объекта?
следуйте моим инструкциям и вставьте службы в контроллер с помощью конструктора. не используйте .Resolve когда-либо
Я нашел метод под названием RegisterInstance, и он отлично работает с моим кодом ... Не могли бы вы объяснить, почему мне не следует использовать Resolve? и если я не использую его, как я могу воспользоваться преимуществом единства?
unity автоматически разрешает контроллеры, когда они нужны.
Но я не разрешаю контроллер, я разрешаю объект ListPresenter
почему вы со мной спорите? попробуй это
Вместо описания кода разместите фактический код.