IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
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í.
Avatar
vodslon
Člen
Avatar
vodslon:16.7.2015 10:12

Ahoj,

Takže problém..mám návrhový vzor EventAggregator, který obsahuje Publish, který má něják vstupní parametr, libovný. Takže například _eventAggrega­tor.Publish(Typ­Proměnné).
A na základě TypProměnné já potom můžu pomocí subsriberu, pouštět k tomu přiřazené metody (zápis _eventAggrega­tor.Subscribe<Typ­Proměnné>(Meto­daCoSePustí).­..takže pokud je TypProměnné string, tak se pustí všechny metody v subsriberem přiřazené s typem string. Já vkládám vlastní typObjektu, třeba třída Class1. takže _eventAggrega­tor.Publish(Clas­s1)...tak chci dynamicky měnit, kteří subsribeři budou poslouchat publish typu Class1...Tak to udělám třeba pomocí Xml, ze kterého vytáhnu ve stringu hodnotu "Class1" tak a ted jak já můžu dynamicky změnit veventAggrega­tor.Subscribe<Typ­Proměnné>(Meto­daCoSePustí) ten TypProměnné. Prostě potřebuji měnit TypProměnné na základě hodnoty ve stringu...Umím udělat si Instanci, pomocí GetType() zjistit Typ, ale jak ho tam vložím, je to kravina, ale já fakt nevím :(

 
Odpovědět
16.7.2015 10:12
Avatar
Odpovídá na vodslon
sadlomaslox25:16.7.2015 20:17

pokud vim tak misto
Subscribe<Typ­Proměnné>(Meto­daCoSePustí)
by melo byt spis
Subscribe<Typ­Proměnné>(Acti­on<TypProměnné> metoda)
abys mohl ziskat data ze zpravy. Ale pokud zmenis TypProměnné z jedne tridy na druhou tak nejsi chopny ziskat data ze zpravy coz pak podle me ztraci smysl pouzivat eventAggregator :)

 
Nahoru Odpovědět
16.7.2015 20:17
Avatar
vodslon
Člen
Avatar
Odpovídá na sadlomaslox25
vodslon:18.7.2015 9:29

ale mě nejde o tu metodu jako takovou...Já budu mít skupinu publisherů, který mi to budou vysílat v různých typech a moje představa je, že k tomu budu moc pomocí konfigu měnit subsribery, což znamená že musím hodnotu ze stringu, která je typ třídy něják přeconvertovat na typ třídy, reference mám v tom problém není. Vše na čem jsem se zasekl je, jak udělat ze string nazavTrídy = "Class1" Subsriber<Class1> -

 
Nahoru Odpovědět
18.7.2015 9:29
Avatar
Odpovídá na vodslon
Petr Štechmüller:18.7.2015 10:34

Podívej se na Reflexi, to je to, co potřebuješ...

Nahoru Odpovědět
18.7.2015 10:34
Pokud spolu kód a komentář nekorespondují, budou patrně oba chybné
Avatar
Odpovídá na vodslon
sadlomaslox25:18.7.2015 14:15

podle me je to sice spatne reseni ale ten kus kodu co hledas tak je

var ag = new Aggregator();
var typ = Type.GetType("namespace.Class2");
var publishGenericMethod = typeof (Aggregator).GetMethod("Publish").MakeGenericMethod(typ);
publishGenericMethod.Invoke(ag, new object[] {new Class2()});
Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
 
Nahoru Odpovědět
18.7.2015 14:15
Avatar
vodslon
Člen
Avatar
Odpovídá na sadlomaslox25
vodslon:20.7.2015 10:31

Moc děkuji za pomoc :) Nakonec jsem to ještě musel poupravit takto, protože tu metodu co hledám bere v parametru Actinon<Type>

publishGenericMethod.Invoke(_eve, new object[] { new Action<dynamic>((d) => { Console.WriteLine("hello world"); })
 
Nahoru Odpovědět
20.7.2015 10:31
Avatar
vodslon
Člen
Avatar
Odpovídá na sadlomaslox25
vodslon:20.7.2015 10:51

Ještě tady k tomu ano je to Subscribe<Typ­Proměnné>(Acti­on<TypProměnné> metoda).
Jenže protože mám všechny ty typy z děděné z jednoho místa, tak je můžu libovolně měnit.

Zatím to testuji ještě abych ukázal upravenou řádku v postu předtím.

publishGenericMethod.Invoke(_eve, new object[] { new Action<dynamic>((d) => { Metoda(d); }) });

ted je vlastně ta Metoda dynamicky plněná Interfacem, který mají všechny ty proměné stejný, takže já si je můžu rozařovat a zároven můžu potom odchytávat data pomocí datového členu té proměné, protože ten mají všichni stejný, snad na to jdu dobře, ale zatím to dělá co potřebuji.

 
Nahoru Odpovědět
20.7.2015 10:51
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 7 zpráv z 7.