Я пытаюсь загрузить сборку с AssemblyLoadContext
(существует с версии 3.0 netcore), создать экземпляр объекта и привести этот объект к интерфейсу, но я получаю ошибку исключения приведения.
Интерфейс используется совместно проектом, который загружает сборку, и созданной реализацией. Объект, по-видимому, создан правильно, но я получаю неожиданную ошибку при выполнении (T)instance
.
Попытка с наблюдателем Я могу правильно привести экземпляр к интерфейсу, следуя коду, который я использую, и скриншоту наблюдателя:
private (ExecutionAssemblyLoadContext, T) LoadTheAssemblyAndInstance<T>(string assemblyName, string typeNameToInstance)
{
var basePath = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location);
var assemblyContext = new ExecutionAssemblyLoadContext($"{basePath}/{assemblyName}.dll");
var assembly = assemblyContext.LoadFromAssemblyPath($"{basePath}/{assemblyName}.dll");
var externalCodeEvent = typeNameToInstance != null ? assembly.ExportedTypes
.Where(x => x.FullName == typeNameToInstance)
.Single() : assembly.ExportedTypes.First();
var instance = Activator.CreateInstance(
externalCodeEvent,
_defaultConstructorParameters
);
return (assemblyContext, (T)instance);
}
![enter image description here](https://i.stack.imgur.com/gyA9X.png)
это полное сообщение об исключении:
System.InvalidCastException: 'Невозможно привести объект типа' Expriva.NewWorkflow.BPMN.ExecutionCodeTest.ExecutionContractTest 'для ввода'Expriva.NewWorkflow.ExternalShared.Interfaces.IExecutionContract'. '
На следующем снимке экрана показано, что T
реализован экземпляром ![enter image description here](https://i.stack.imgur.com/BH3Rh.png)