[ Radudzoni @ 03.09.2006. 16:13 ] @
Jel moze u C#.NET - u da se instancira klasa preko njenog naziva... Dakle u namespace-u imam nekoliko klasa i u runtimeu znam naziv klase ciji objekat treba da kreiram i hocu da ga kreiram preko tog naziva...
Znam da bih mogao da napravim metodu koja ce mi vracati instance klase na osnovu prosledjenog naziva ali bih da izbegnem to resenje... A znam da u Javi postoji nacin da se klasa instancira preko imena, pa pretpostavljam da nesto tako meze da se uradi i u C#, mozda pomocu refleksije...

Pozdav.
[ DarkMan @ 03.09.2006. 19:53 ] @
Evo ti jedan primer za instanciranje forme:
Code:

                Form form = (Form)Activator.CreateInstance(Type.GetType("FormMain"));
[ spartak @ 04.09.2006. 00:47 ] @
Code:

  MojaKlasa mojObjekat = new MojaKlasa();
[ Radudzoni @ 04.09.2006. 08:22 ] @
Citat:
spartak
Code:

  MojaKlasa mojObjekat = new MojaKlasa();


spartak, batice, nadam se da se salis ;-)

Citat:
DarkMan: Evo ti jedan primer za instanciranje forme:
Code:

                Form form = (Form)Activator.CreateInstance(Type.GetType("FormMain"));


Mislim da je ovo to sto mi treba... Nisam jos probao ali zvuci logicno... Hvala DarkMan
[ Radudzoni @ 05.09.2006. 12:25 ] @
Citat:


Citat:
DarkMan: Evo ti jedan primer za instanciranje forme:

Code:

Form form = (Form)Activator.CreateInstance(Type.GetType("FormMain"));



Mislim da je ovo to sto mi treba... Nisam jos probao ali zvuci logicno... Hvala DarkMan

Malo me kolje sto mi je klasa ciji objekat hocu u drugom dll-u... hm..(?)
Zapravo, evo situacije... Na osnovu domenskog objekta koji prosledim perzistentnom servisu ja znam kog mi je tipa objekat, jer je on spoljni kljuc objekta koji sam prosledio, pa refleksijom dodjem do njegovog tipa... (kazem spoljni kljuc jer mi domenski objekti predstavljaju "sliku" baze)... Ali sex nastaje zato sto u design timeu perzistentni servis zbog late bindinga nema pojma koji ce mu objekat biti prosledjen...
A neki Factory koji ce mi kreirati objekte na osnovu prosledjenog stringa izbegavam jer cu sa pojavom novog domenskog objekta morati da menjam i Factory klasu, sto bih voleo da izbegnem...
Parametar metode CreateInstance(Type type) - Type.GetType("NazivDomenskogObjekta") mi vraca null u run time-u...

Ako neko na osnovu ovih dodatnih informacija ima resenje, voleo bih da ga cujem...

Pozdrav.
[ DarkMan @ 05.09.2006. 16:50 ] @
Mozda bih mogao pomoci kada bi imao neki mali primer.
Mozda da probas da izvuces type na sledeci nacin (ovo samo nagadjam, nisam nikada radio):
Code:

Assembly a = Assembly.Load("<tvoj dll>");
Type[] types = a.GetTypes(  );
[ Radudzoni @ 05.09.2006. 19:39 ] @
Code:

public class Mesto
{
    [Kljuc("ID")]
    public int ID
   {
       get i set;
   }
    
   [Polje("Naziv")]
   public string Naziv
   {
       get i set;
   }

    [SpoljniKljuc()]
    public Drzava DrzavaFK
   {
       get i set;
   }
}

public class Drzava
{
    [Kljuc("IDDrzava")]
    public int ID
   {
       get i set;
   }
    
   [Polje("Naziv")]
   public string Naziv
   {
       get i set;
   }
}


class NekaKlasa
{
    public void Daj(object o)
    {
    //Imam napunjen IDataReader reader iz tabele Mesta
   //Prolazim kroz sve propertije i gadjam polja u readeru u glavu preko naziva koje dobijam refleksijom iz propertija
   //Kad dodjem na properti DrzavaFK
    
   object o1 = //sad mi treba instanca Drzava klase
                   //jer mi je u readeru kolona IDDrzava
                   //a koji ce objekat biti prosledjen metodi to se ne zna...
   //ali u vreme izvrsenja ja znam kog mi je tipa properti DrzavaFK (znaci Drzava)
   //i samo treba nekako da ga instanciram... preko tipa ili naziva... kako god...

    //inace NE MOGU da ga instanciram u konstruktoru (jer mi je bitno da to ne readim), tako da ga postavljam na null...!!!
}


Eto to su moji problemi ;-)
[ negyxo @ 05.09.2006. 20:57 ] @
Hmm, jesi li ti pogledao sve metode CreateInstance. Imas CreateInstance(string assemblyNam, string typeName) bas za tu namenu da ucitas iz drugog assembly-ja objekat. Probaj pa javi.
[ DarkMan @ 05.09.2006. 21:01 ] @
Ovde bi bilo bolje da ti pomogne neko ko je vise radio sa strongly typed data sets (nisam nikada radio sa njima a pretpostavljam da je ovde to u pitanju).
Mnogo si sturo dao taj primer. Opis mi je dosta nerazumljiv a nisi napisao nista koda u metodi Daj.
Gde ti je taj IDataReader za Mesta?
Sta je parametar "object o" u metodi Daj? Jel to instanca klase Mesta na osnovu koje hoces da dobije instancu klase Drzava?
Kazes da znas kog je tipa objekat koji trebas da instanciras a ne mozes da ga instanciratis?
Ako si prosledjivao ime klase kao string, jesi li prosledjivao puno ime objekta (ime namespace-a +"." + naziv klase) ?
Zar ti typeof(DrzavaFK) ne vraca klasu Drzava?
Kako bi ga inace normalno instancirao klasu Drzava (bez ovih petljanja sa imenima)?
[ Radudzoni @ 06.09.2006. 10:12 ] @
Citat:
Gde ti je taj IDataReader za Mesta?

On je nebitan... Povukao je tri kolone iz tabele Mesta i to sam proverio u debugeru

Citat:

Sta je parametar "object o" u metodi Daj? Jel to instanca klase Mesta na osnovu koje hoces da dobije instancu klase Drzava?

Da... u ovom slucaju to je objekat klase Mesta... a tokom rada aplikacije moze da bude bilo koji Domenski objekat (Radnik, PoslovniPartner, Roba...)

Citat:
Kazes da znas kog je tipa objekat koji trebas da instanciras a ne mozes da ga instanciratis?

Da... u debageru mi PropertyInfo govori o tome kog je tipa properti DrzavaFK... ali nisam mogao da ga instanciram...

Citat:
Ako si prosledjivao ime klase kao string, jesi li prosledjivao puno ime objekta (ime namespace-a +"." + naziv klase) ?

Jesam... ali...

Citat:
Kako bi ga inace normalno instancirao klasu Drzava (bez ovih petljanja sa imenima)?

Code:
Drzava drzava = new Drzava();

ako sam dobro razumeo pitanje...


Citat:
Hmm, jesi li ti pogledao sve metode CreateInstance. Imas CreateInstance(string assemblyNam, string typeName) bas za tu namenu da ucitas iz drugog assembly-ja objekat. Probaj pa javi.

CreateInstance(string assemblyNam, string typeName) vraca System.Runtime.Remoting.ObjectHandle... pa onda pozovem metodu Unwrap() od ObjectHandle objekta i ona mi vrati objekat koji je Wrap-ovan...
Tako da sam uspeo da dobijem ono sto sam hteo...

Hvala na pomoci, drugari...
[ Prokleta_Nedelja @ 06.09.2006. 14:22 ] @
imam jedno rjesenje ali nisam siguran koliko ce ti odgovarati

dim kolekcija as new collection
dim objekt as mojobjekt


sub praviinstancu
kolekcija.add (new mojobjekt)
objekt= kolekcija.item(kolekcija.count)
controls.add objekt
end sub

svaki objekt mozes pozivati ovako

objekt=kolekcija.item(neki broj)

i onda raditi sa tim objektom

objekt.visible i tome slicno