W ciągu przekazywania referencji mam jakąś dziurę, ale nie mogę jej zlokalizować, albo źle przekazuje te referencje, prosiłbym o pomoc w zlokalizowaniu co jest nie tak.
od PrezenteraOknaGlownego pcham do kolejnych obiektów referencje do obiektu typu "RegulaWalidacji ".
inicjalizuje ten obiekt dopiero w obiekcie "ObslugaPobieraniaZmapowanychProgramow" w jego metodzie " WykonajPolecenie(string odczytNrZlecenia)" spodziewam się ze od momentu inicjalizacji ten obiekt będę miał we wszystkich wymienionych obiektach w tym samym stanie, w którymkolwiek go zmienię, zmiana ta będzie widoczna w każdym innym który ma taka właściwość, ale tak nie jest.
- zaznaczyłem w kodzie wszystkie miejsca gdzie postawiłem BreakPointa,
- dodałem wszystkie kolejne referencje "RegulaWalidacji" (wszystkie właściwości tego typu) w każdym z tych obiektów poniżej do okna Watch w VisualStudio żeby podglądać ich zawartość wartości
- ustawiają się w kolejności zgodnie z wywołaniami konstruktorów:
PresenterOknaGlownego
PresenterWalidacji
ObslugaPobieraniaZmapowanychProgramow
ObslugaPobieraniaProgramowZZapisow
ObslugaWalidowaniaDopasowaniaWersji
ManagerPolecenWalidacji - następnie wywołuje metodę z obiektu: ObslugaPobieraniaZmapowanychProgramow.WykonajPolecenie(string odczytNrZlecenia) w której inicjuje ten obiekt i zaczynam go ustawiać danymi,
- następnie chce wykonać metodę z kolejnego obiektu: ObslugaPobieraniaProgramowZZapisow.WykonajPolecenie(string odczyt) w której "dokładam" kolejne dane do typu "RegulaWalidacji" ale tu już wywala wyjątek ze "BiezacaRegulaPolZap" jest null i nie ma się do czego odwołać żeby ustawić jego kolejne właściwości.
Co robię nie tak z tymi referencjami?
public class PresenterOknaGlownego
{
//(...)
public RegulaWalidacji BiezacaRegulaPresGlowny { get; set; }
public DaneWyrobuPakowanego WybranyArtykulDoPakowania { get; set; }
//(...)
public PresenterOknaGlownego(IWidokOknaGlownego view)
{
this.view = view;
ManagerDrukowania = new ManagerPolecenDrukowania(this);
//(...)
} //TUTAJ JEST BREAKPOINT
//(...)
}
public class PresenterWalidacji
{
//(...)
private readonly IWidokWalidacjiWersjiProgramu viewWalidacji;
public PresenterOknaGlownego PresenterOknaGlownego { get; private set; }
public DaneWyrobuPakowanego PakowanyArtukulOWWP { get; set; }
public ManagerPolecenWalidacji ManagerWalidacji { get; private set; }
public RegulaWalidacji BiezacaRegulaPrezWalidacji { get; set; }
public PresenterWalidacji(IWidokWalidacjiWersjiProgramu view, PresenterOknaGlownego mainPresenter)
{
this.viewWalidacji = view;
this.PresenterOknaGlownego = mainPresenter;
PakowanyArtukulOWWP = PresenterOknaGlownego.WybranyArtykulDoPakowania;
BiezacaRegulaPrezWalidacji = PresenterOknaGlownego.BiezacaRegulaPresGlowny;
ManagerWalidacji = new ManagerPolecenWalidacji(this);
}//TUTAJ JEST BREAKPOINT
//(...)
}
public class ManagerPolecenWalidacji
{
private WykonawcaPolecenWalidacji walidator;
public RegulaWalidacji BiezacaRegulaManagerPolecen { get; private set; }
public ManagerPolecenWalidacji(PresenterWalidacji presenter)
{
walidator = new WykonawcaPolecenWalidacji();
walidator.ZdefiniujObslugeWalidacji(TypRozkazuEnum.OdczytNrZlecenia, new ObslugaPobieraniaZmapowanychProgramow(presenter));
walidator.ZdefiniujObslugeWalidacji(TypRozkazuEnum.OdczytUID, new ObslugaPobieraniaProgramowZZapisow(presenter));
walidator.ZdefiniujObslugeWalidacji(TypRozkazuEnum.WalidatorProg, new ObslugaWalidowaniaDopasowaniaWersji(presenter));
BiezacaRegulaManagerPolecen = presenter.BiezacaRegulaPrezWalidacji;
}//TUTAJ JEST BREAKPOINT
public void PrzekazDoWykonania(string odczytWartosc)
{
walidator.RozkodujIWykonaj(odczytWartosc);
}
}
public class ObslugaPobieraniaZmapowanychProgramow : ObslugaWalidacjiBase, IPolecenieWalidacji
{
//(...)
private DaneWyrobuPakowanego pakowanyArtykul;
private PresenterWalidacji presenterOWWP;
public RegulaWalidacji BiezacaRegulaPolMap { get; private set; }
public ObslugaPobieraniaZmapowanychProgramow(PresenterWalidacji presenter)
{
//(...)
this.presenterOWWP = presenter;
pakowanyArtykul = presenter.PakowanyArtukulOWWP;
BiezacaRegulaPolMap = presenter.BiezacaRegulaPrezWalidacji;
}//TUTAJ JEST BREAKPOINT
public void WykonajPolecenie(string odczytNrZlecenia)
{
//(...)
//TUTAJ NASTEPUJE PIERWSZA INICJALIZACJA OBIEKTU
BiezacaRegulaPolMap = new RegulaWalidacji(pakowanyArtykul.NrZlecenia, pakowanyArtykul.Index);
foreach (var item in ZwrocZmapowaneProgramyDoIndexu(pakowanyArtykul.Index))
{
BiezacaRegulaPolMap.DodajProgramZ_Mapowania(new DaneProgramu(item.NazwaPlikuProgramu));
}
//(...)
}
//(...)
}
public class ObslugaPobieraniaProgramowZZapisow : ObslugaWalidacjiBase, IPolecenieWalidacji
{
//(...)
public RegulaWalidacji BiezacaRegulaPolZap { get; private set; }
private PresenterWalidacji presenterOWWP;
public ObslugaPobieraniaProgramowZZapisow(PresenterWalidacji presenter)
{
//(...)
this.presenterOWWP = presenter;
BiezacaRegulaPolZap = presenter.BiezacaRegulaPrezWalidacji;
}//TUTAJ JEST BREAKPOINT
//(...)
}
public class ObslugaWalidowaniaDopasowaniaWersji : ObslugaWalidacjiBase, IPolecenieWalidacji
{
private PresenterWalidacji presenterOWWP;
public RegulaWalidacji BiezacaRegulaPolWal { get; set; }
public ObslugaWalidowaniaDopasowaniaWersji(PresenterWalidacji presenter)
{
this.presenterOWWP = presenter;
BiezacaRegulaPolWal = presenter.BiezacaRegulaPrezWalidacji;
}//TUTAJ JEST BREAKPOINT
//(...)
}