MethodInfo.Invoke требует администратора на Windows 7? - PullRequest
0 голосов
/ 13 декабря 2010

Таким образом, я загружаю сборку во время выполнения, а также использую обобщенные типы в зависимости от типа сборки.Чтобы получить правильный тип, каждая DLL реализует фабрику, которая, как я ожидаю, существует, которая создает экземпляр класса с правильным универсальным типом.

            Type factoryType = assembly.GetType("MyCompany.ScenarioPlayer.PlayerFactory");
            MethodInfo method = factoryType.GetMethod("CreatePlayer", BindingFlags.Public | BindingFlags.Static);

            player = (IScenarioPlayer)method.Invoke(null, null);

Этот код завершается ошибкой в ​​методе.иметь административные привилегии.Правильно ли это, что любые вызовы MethodInfo. Invoke, как я использую, требует администратора?Я вошел в код моей DLL, и он даже не проходит этот вызов в Factory.

edit: оказывается, что для целевой DLL была зависимость, которая не учитывалась.Мне действительно нравится предложенная идея структуры MEF.

Ответы [ 2 ]

3 голосов
/ 13 декабря 2010

Использование рефлексии в том виде, в каком вы ее используете, для решения проблемы создания фабрик во время выполнения - плохая идея. Вы не только не избегаете связывания (у вас есть жестко закодированная строка, ссылающаяся на один тип), вы открываете мир боли. Ничего из этого не напечатано строго.

Я бы посоветовал взглянуть на что-то вроде MEF , если вы хотите создать подключаемые компоненты. Он уже решает проблемы, с которыми вы сталкиваетесь , а - делает это намного лучше, быстрее и удобнее в обслуживании.

2 голосов
/ 13 декабря 2010

Это не имеет никакого отношения к MethodInfo, а скорее к тому, что MethodInfo делает наиболее вероятно. Вы можете проверить это, вызвав соответствующий метод и посмотрев, работает ли он в среде без прав администратора.

...