У меня интересная проблема. Мне нужно динамически оборачивать статические классы. Т.е. вернуть нестатический экземпляр моим вызывающим абонентам. Например: [
public object CreateInstance(string className) {
Type t = assembly.GetType(className);
if (IsStatic(t)) {
return CreateStaticWrapper(t);
} else {
return Activator.CreateInstance(t);
}
}
] Мне нужны указатели на то, как реализовать CreateStaticWrapper
.
Примечание: к сожалению, я не могу использовать динамические объекты.
Итак, каковы мои варианты?Я не очень хочу изучать поколение IL? Если генерация IL (Reflection.Emit, или есть другие способы сейчас?) - это путь, есть ли у кого-нибудь там указатели?
Edit: Важно отметить, что я могу вернуть словарь делегатов. Поэтому я мог бы использовать для этого Delegate.CreateDelegate
, но я не могу понять, как обрабатывать перегруженные методы и универсальные методы.
Edit2: Другой вариант - вставить пустой конструктор в тип используя Emit, снова какие-то указатели? Возможно ли это даже для типа, отмеченного как статический? Входит ли ключевое слово static в IL?
Edit3: Для некоторого контекста я передаю это в среду javascript: мой проект . Поэтому я хотел бы иметь возможность (на JavaScript):
var fileHelper = .create('System.IO.File');
if (fileHelper.Exists(fileName)) { fileHelper.Delete(fileName); }
Всем спасибо.