Pouze tento týden sleva až 80 % na e-learning týkající se C# .NET. Zároveň využij akci až 30 % zdarma při nákupu e-learningu - Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
discount 30 + hiring
Avatar
Petr Kasnal
Člen
Avatar
Petr Kasnal:1.4.2018 18:47

Zdravím mám takový problém tvořím si vlastní aplikaci pomocí MVVM a používám UnityFactory ale o to v celku nejde. Mám následující kód:

ParentViewModel parentVM = UnityFactory.Retrieve().Resolve<ParentViewModel>();
UnityFactory.Retrieve().RegisterInstance<ParentViewModel>(parentVM);
UnityFactory.Retrieve().Resolve<ParentViewModel>().Initialize();

Vše funguje jak má ale těchto bloků kódu mam cca 5 a chtěl bych nějakou obecnou metodu něco jako RegisterViewModel a tato metoda by měla dělat část kódu výše ale obecně to znamená že bych jí mohl použít na více viewmodelů. Samozřejmě vím že to bude nějakým způsobem přes genericitu nebo něco podobného jinak každý viewmmodel mi dědí BaseViewModel a ten má metodu Initialize.

Předem všem strašně děkuji za jakoukoli radu :) Různě jsem to zkoušel ale už opravdu nevim jk dal.. díky

 
Odpovědět
1.4.2018 18:47
Avatar
Martin Petrovaj
Tvůrce
Avatar
Martin Petrovaj:1.4.2018 19:18

Skúšal si spraviť generickú metódu?

void MojaMetoda<T> ()   // alebo iný návratový typ, čo už potrebuješ
{
        T viewModel = UnityFactory.Retrieve().Resolve<T>();
        UnityFactory.Retrieve().RegisterInstance<T>(viewModel);
        UnityFactory.Retrieve().Resolve<T>().Initialize();
}

Nerobím s MVVM, takže neviem, či sú metódy na tvojej UnityFactory statické, ak nie, tak si tú továreň pridáš ako parameter.

Prvé čo mi napadlo, nijako som to netestoval, snáď pomôže.

Nahoru Odpovědět
1.4.2018 19:18
if (this.motto == "") { throw new NotImplementedException(); }
Avatar
Petr Kasnal
Člen
Avatar
Odpovídá na Martin Petrovaj
Petr Kasnal:1.4.2018 20:01

Moc děkuji za odpověď :) Přesně tkhle jsem to udělal ale je samozřejmě problém, že nemůžu zavolat metodu Initialize...

 
Nahoru Odpovědět
1.4.2018 20:01
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!
Avatar
Martin Petrovaj
Tvůrce
Avatar
Odpovídá na Petr Kasnal
Martin Petrovaj:1.4.2018 20:11

Prepáč, zabudol som :-)

void MojaMetoda<T> () where T: BaseViewModel
{
        T viewModel = UnityFactory.Retrieve().Resolve<T>();
        UnityFactory.Retrieve().RegisterInstance<T>(viewModel);
        UnityFactory.Retrieve().Resolve<T>().Initialize();
}
Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
Nahoru Odpovědět
1.4.2018 20:11
if (this.motto == "") { throw new NotImplementedException(); }
Avatar
Petr Kasnal
Člen
Avatar
Odpovídá na Martin Petrovaj
Petr Kasnal:1.4.2018 20:14

Aaa na tohle jsem právě nemohl přijít :D Strašně moc děkuju :)

 
Nahoru Odpovědět
1.4.2018 20:14
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 5 zpráv z 5.