Можно ли совместить дженерики и рефлексию в этой ситуации? - PullRequest
1 голос
/ 06 мая 2011

Я пытаюсь вызвать некоторую функциональность, которая требует, чтобы тип передавался в общей ситуации. У меня есть только строковое представление типа и сборка, которая содержит тип. Возможно ли это как-нибудь?

Звонок:

var typeName = "CustomNamespace.CustomType";

//CustomNamespace.CustomType should be replaced with typeName
Generator.RegisterTemplate<CustomNamespace.CustomType>(); 

Функция:

    public void RegisterTemplate<TModel>(string templateName, 
        string templateString)
    {
        templateItems[TranslateKey(typeof(TModel), templateName)] = 
            new RazorTemplateEntry() { 
                ModelType = typeof(TModel), 
                TemplateString = templateString, 
                TemplateName = "Rzr" + Guid.NewGuid().ToString("N") 
            };
    }

1 Ответ

2 голосов
/ 06 мая 2011

Ну, вы можете использовать MethodInfo.MakeGenericMethod:

Type type = Type.GetType(typeAndAssemblyName);
MethodInfo method = typeof(Foo).GetMethod("RegisterTemplate");
MethodInfo generic = method.MakeGenericMethod(type);
generic.Invoke(...);

Использование обобщений с отражением довольно неприятно, но работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...