Autor Beitrag
Telefisch
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 20



BeitragVerfasst: Do 18.06.09 13:50 
Hallo Forum,
ich stehe vor zwei Problemen beim späten binden einer assembly.

Mein erstes Problem sind Enumerationen.
Es gibt einige Methoden, denen Enumerationen aus der assembly übergeben werden müssen.
Wie komme ich an die Enumerationen heran?

Als Beispiel habe ich folgenden Methodenaufruf:

ausblenden C#-Quelltext
1:
arrStorableObjects = oInsert.GetType().InvokeMember( "PageMacro", BindingFlags.InvokeMethod, null, oInsert, new object[5] { MacroName, oPage, oProject, false, PageMacro.Enums.NumerationMode.None } );					


Hier ist der 5. Parameter aus der assembly, was natürlich so lange funktioniert, wie die Assembly eingebunden ist.


Das zweite Problem habe ich beim Setzen eines Properties:

ausblenden C#-Quelltext
1:
propertyInfo.SetValue( pagePropertyList,(PropertyValue) "1000"null );					


Wie hier zu sehen, erwartet das Objekt einen Property-Wert in Form von PropertyValue.
PropertyValue ist aber ein spezifischer Typ aus der Assembly.
Wie kann ich den String ("1000") so casten, dass es ein PropertyValue ist?

Ich hoffe ich habe mich einigermaßen verständlich gemacht, sonst fragt einfach.

Danke im Vorraus
Tele
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Do 18.06.09 15:12 
user profile iconTelefisch hat folgendes geschrieben Zum zitierten Posting springen:
ich stehe vor zwei Problemen beim späten binden einer assembly.
Was genau hast du denn vor? Assemblies werden eigentlich sowieso "relativ spät" gebunden: erst beim Aufruf der ersten Methode, die einen Typ daraus benutzt. Reflection ist normalerweise nur bei Addin-Mechanismen nötig.

_________________
>λ=
Telefisch Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 20



BeitragVerfasst: Do 18.06.09 15:37 
Hallo Kha

Genau das ist mein Problem...
Ein AddIn für Excel in dem ich eine Drittanbieter dll verwende.

Also das Problem mit der Typumwandlung hab ich gelöst.
Da gibt es eine Klasse, die bei früher Bindung implizit die Property-Eigenschaft umwandelt.
Die hab ich halt manuell aufrufen müssen.

Jetzt stehe ich noch vor dem Problem mit dem Enumerator.

Da hab ich nooch etwas schwierigkeiten.

Im Augenblick ists so:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
//lade Assembly
//assemblyPath ist hier der Dateipfad zur dll
Assembly externalAssembly = Assembly.LoadFrom( assemblyPath, new Evidence( Assembly.GetExecutingAssembly().Evidence ) );
//Typ und Feld aus externer Assembly holen
//wobei hier typeName = "Eplan.EplApi.DataModel.MasterData" und enumeratorList = "PageMacro.Enums.NumerationMode" ist.
return externalAssembly.GetType( typeName + "." + enumeratorList ).GetField( enumeratorName ).GetValue( null );


Haaabs aber grade gelöst:
enumeratorList musste "PageMacro+Enums+NumerationMode" sein (man achte auf die "+" statt "."

Aber danke für die Rückfrage.
Manchmal löst sichs von selbst, beim Antworten ;)