Toon posts:

[.NET] Assembly info opvragen

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb 2 classes, in 2 verschillende assemblies:
code:
1
2
public class AAA {
}

en
code:
1
2
public class BBB : AAA {
}

BBB erft dus over van AAA. Nu wil ik AAA een property geven waarmee ik de assembly info op kan vragen. BBB heeft deze property dan dus ook. Hoe krijg ik voor elkaar dat ik BBB zijn EIGEN assembly info terug laat geven, en niet die van bv AAA.

De mogelijkheden om bij een assembly te komen zijn volgens mij:
code:
1
2
3
4
Assembly.GetAssembly(System.Type type)
Assembly.GetCallingAssembly()
Assembly.GetEntryAssembly()
Assembly.GetExecutingAssembly()


De onderste 3 doen het niet. GetCallingAssembly zou in principe in de assembly van BBB zelf wel werken, maar daar buiten niet. GetAssembly(System.Type type) is geen optie omdat ik in AAA niet het type van BBB weet.

Iemand? :)

[ Voor 4% gewijzigd door Verwijderd op 12-03-2004 12:56 . Reden: typo ]


  • whoami
  • Registratie: December 2000
  • Laatst online: 00:40
Ben je zeker dat beide classes in verschillende assemblies (elk in een verschillende DLL, EXE, ...) zitten?

BBB is een class, AAA is een class, maar het zijn geen assemblies. Het zijn wel types, en die type informatie kan je uit een assembly halen.

[ Voor 18% gewijzigd door whoami op 12-03-2004 13:01 ]

https://fgheysels.github.io/


Verwijderd

Topicstarter
Jup, beiden zitten in een verschillende assembly.

Het kan zo zijn dat ik in een 3e assembly een instantie van BBB aanmaak. Vandaar dat GetCallingAssembly() ook geen oplossing biedt (dan zou ik deze 3e assembly te pakken krijgen...).

Even ter info de property die ik in AAA wil definieren:
code:
1
2
3
4
5
public string Title { 
  get { 
    return ((AssemblyTitleAttribute)Assembly.GetCallingAssembly().GetCustomAttributes(typeof(AssemblyTitleAttribute), false)[0]).Title;
  } 
}

Maar deze werkt dus niet...

[ Voor 40% gewijzigd door Verwijderd op 12-03-2004 13:12 ]


  • whoami
  • Registratie: December 2000
  • Laatst online: 00:40
Nu volg ik je niet meer.
Eerst zeg je dat die classes in verschillende assemblies gedefinieerd zijn, en nu zeg je dat ze in verschillende assemblies geinstantieerd worden?

https://fgheysels.github.io/


Verwijderd

Topicstarter
Sorry, misschien ben ik niet duidelijk maar volgens mij zeg ik het goed.

Klasse AAA is in assembly 1 gedefinieerd
Klasse BBB is in assembly 2 gedefinieerd en erft over van AAA

Het voorbeeld van de instanties dat ik aanhaalde was dat ik in een willekeurige andere assembly instanties van BBB aan kan maken. Daarom werkt Assembly.GetCallinyAssembly() niet.

  • whoami
  • Registratie: December 2000
  • Laatst online: 00:40
Als je het object hebt waarvan je de info wilt opvragen reeds hebt, dan kan je ook met de GetType() method aan de slag vermoed ik.

code:
1
2
3
4
myObject.Assembly; 
myObject.GetType().GetMethods();
myObject.GetType().GetFields();
....

[ Voor 5% gewijzigd door whoami op 12-03-2004 13:24 ]

https://fgheysels.github.io/


Verwijderd

Topicstarter
Ja das waar. Maar ik wilde eigenlijk de property gewoon in AAA definieren, en dan weet je niets van BBB. Ik denk echter niet dat dit niet dat dit mogelijk is. Toch bedankt.

  • whoami
  • Registratie: December 2000
  • Laatst online: 00:40
Hmmm, toch wel. Dit is gewoon standaard OO kennis ivm inheritance hoor:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Test1
{
    public string TypeInfo
    {
          get
          {
                 return this.GetType().ToString();
          }
    }
}

class Test2 : Test1
{
}

En dan doe je :
code:
1
2
3
4
5
Test1 t1 = new Test1();
Test2 t2 = new Test2();

Console.WriteLine (t1.TypeInfo);
Console.WriteLine (t2.TypeInfo);


Test1 weet idd niets af van test2, maar Test2 heeft ook een TypeInfo property. Aangezien je dan de TypeInfo van Test2 aanroept, returnt die de juiste informatie.

[ Voor 17% gewijzigd door whoami op 12-03-2004 16:30 ]

https://fgheysels.github.io/

Pagina: 1