надеюсь, кто-то может помочь.Я использую Unity и app.config для динамической загрузки и запуска методов в определенных сборках.В нашем основном приложении я делал что-то вроде ...
var ourProcess = container.Resolve<IProcessing>(new ResolverOverride[] { new ParameterOverride("parameter1", value1) });
ourProcess.ExecuteProcess(parameterValues);
// parameterValues a string list, all of my processes use this main calling mechanism.
// there are many other interfaces i a number of other assemblies along with IProcessing
Однако в основном приложении мне нужна ссылка на интерфейс IP-обработки, и это бесполезно, потому что, если я добавлю другую сборку обработки, я не будуЯ не хочу ссылаться на указанную новую сборку в основном приложении, перестраивать, повторно тестировать и распространять, я просто хочу, чтобы Unity разрешал и вызывал по мере необходимости.
Я пытался использовать отражение по типу ...
Assembly asm = Assembly.LoadFrom("CompName.Application.Processing.dll");
foreach (Type type in asm.GetTypes())
{
if (type.GetInterface("IProcessing") != null)
{
var ourProcess = container.Resolve<type> (new ResolverOverride[] { new ParameterOverride("parameter1", value1) });
oSummary = ourProcess.ExecuteProcess(parameterValues);
}
}
// at runtime we will know the strings "CompName.Application.Processing.dll" and "IProcessing"
Однако во время компиляции мы получаем, что «тип» является переменной, но используется как тип », достаточно справедливо.
Я пробовал typeof (type), type.GetType() и Тип (тип) безрезультатно, что приводит к различным ошибкам компилятора.
Итак, вопрос в том, как использовать строковое имя интерфейса, который требуется для создания экземпляра и запуска процесса в-связанная сборка разрешена и загружена Unity?Я немного новичок в Unity, и это первый раз, когда я использую рефлексию, поэтому, пожалуйста, будьте осторожны со мной.Однако я чувствую, что это должно быть относительно легко, и чувствую, что упускаю что-то фундаментальное.
Я искал предыдущие несколько часов и пробовал одну или две вещи, но ни одна не дала мне результаты, которые мне нужны.Удаление кода, управляемого Unity, во всех системах может занять много времени.
Любой вклад приветствуется, спасибо.