Как только вы позвоните по этой линии
var shellViewLibrary = Assembly.LoadFrom(Path.Combine(_DllsPath, _DllShellView));
Сборка загружена в память. До тех пор, пока вы правильно указали типы из этого, вы сможете использовать Activator.CreateInstance для создания типов. т.е.: нет необходимости дополнительно указывать , где тип.
Относительно Активатора, с MSDN метод CreateInstance может принимать System.Type. Я бы просто использовал этот метод внутри вашего оператора if:
Activator.CreateInstance(Type type);
Что бы я попытался сделать для отладки, это сначала создать тип, а затем передать его в CreateInstance. Вы можете обнаружить, что создание самого типа не выполняется (из-за неразрешенной сборки) или создается экземпляр этого типа (из-за исключения в конструкторе). На первый взгляд ваш код здесь выглядит правильно:
foreach (Type type in types)
{
var typeIShellViewInterface = type.GetInterface(_NamespaceIShellView, false);
if (typeIShellViewInterface != null)
{
try
{
// I assume you are calling this line at the point marked 'here'.
// To debug the creation wrap in a try-catch and view the inner exceptions
var result = Activator.CreateInstance(type);
}
catch(Exception caught)
{
// When you hit this line, look at caught inner exceptions
// I suspect you have a broken Xaml file inside WPF usercontrol
// or Xaml resource dictionary used by type
Debugger.Break();
}
}
}
В своем вопросе вы указываете, что получаете XamlParseException
. Мне кажется, что рассматриваемый тип - это UserControl (или иным образом относится к файлу ресурса XFL WPF), и в этом файле Xaml есть ошибка, то есть ничего общего с использованием Assembly.Load или Activator.CreateInstance.
Не могли бы вы опубликовать внутреннее исключение (я), чтобы лучше понять, в чем проблема?