#c_sharp #aspnet #dll
Добрый день. Мне нужно из моей dll передать объект класса, реализующего такой интерфейс:
public interface IDataProvider
{
void InitPhone();
List GetPhone();
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. ?
Комментариев нет:
Отправить комментарий