dynamic вместо рефлексии
Интерфейс dynamic не особо сложный, пожалуй за определенное время можно аккуратно написать проброс рефлексии через интерфейс dynamic
Можно ли использовать nuget пакет, или какую то либу что бы не городить вот такое
public DynReflect : System.Dynamic.DynamicObject {
private object aObj; // Обьект назначения
private Type aType;// Тип обьекта назначения
public override bool TryGetMember(GetMemberBinder binder, out object result)
{
var prop = aType.GetProperty(binder.Name);
if (prop == null) {
result = null;
return false;
}
result = prop.GetValue(aObj);
return true;
}
}
Может уже есть готовое решение?
В данном случае есть COM-библиотека сторонняя, написана вообще непонятно на чем. Разработчик библиотеки неудосужился сделать портирование под с#.
Приходится писать нечто вроде
Type ComType= Type.GetTypeFromProgID("ScriptControl") // Подключаем либу
var obj =ComType.InvokeMember(null, BindingFlags.CreateInstance, null, null, new object[0]) // Вызов конструктора
Comtype.InvokeMember("Init", BindingFlags.InvokeMethod, null, obj, new object[]{}); Вызов метода
Все COM-методы известны, но вызвать их получается только через рефлексию, вот и подумал через dymaic было бы удобнее написать нечто вроде
var a = DynReflect.CreateCOM("Класс");
a.Init();
a.BeginSession();
a.PrintComment("Hello");
a.EndSession();
Так гораздо читабельнее бы было.