#c_sharp #aspnet #dll
Добрый день. Мне нужно из моей dll передать объект класса, реализующего такой интерфейс: public interface IDataProvider { void InitPhone(); ListGetPhone(); string Print(); } передать в мое основное приложение. В основном приложении я так же описал данный интерфейс. В dll написан вот такой код который возвращает реализацию данного интерфейса: public class CreateInstance { public IDataProvider GetDataProvider() { IDataProvider provider = new DataProvider(); return provider; } } А в основном приложении данная библиотека подключается при помощи assembly meneger и вызывается, таким вот образом: public class DataModuleInterface { Object o; Type t; Assembly ass; public DataModuleInterface() { var binFolder = new DirectoryInfo(Path.Combine(@"C:\Users\Neoniklain\Source\Repos\KemSU_Shedule\Shedule\Shedule\Modules")); foreach (var file in binFolder.GetFileSystemInfos("*.dll", SearchOption.AllDirectories)) { ass = AssemblyLoadContext.Default.LoadFromAssemblyPath(file.FullName); Type[] AssemlyResource = ass.GetExportedTypes(); Type type= AssemlyResource[0]; foreach (var item in AssemlyResource) { if(item.Name=="CreateInstance") { t = ass.GetType(item.FullName); } } o = Activator.CreateInstance(t); } } public IDataProvider GetProvider() { MethodInfo m = ass.GetType(t.ToString()).GetMethod("GetDataProvider"); IDataProvider res = (IDataProvider)m.Invoke(o, null); return res; } } Ошибка возникает вот в этом месте: IDataProvider res = (IDataProvider)m.Invoke(o, null); И содержит следующий текст: System.InvalidCastException: "Unable to cast object of type 'Shedule.Module.DataModule.DataProvider' to type 'Shedule.Module.DataModule.IDataProvider'." Здесь стоит сказать что hedule.Module.DataModule - это моя библиотека, из которой я хочу получить тот самый злосчастный класс.
Ответы
Ответ 1
В основном приложении я так же описал данный интерфейс. У Вас определение интерфейса существует в двух местах, что для .NET означает два разных типа. Поместите тип интерфейса в третью библиотеку и ссылайтесь на нее из первых двух. P.S. А кто из присутствующих когда-нибудь получал такое сообщение об ошибке: Cannot assign TFont to TFont. ?
Комментариев нет:
Отправить комментарий