У меня есть следующее в сборке бизнес-логики:
public class BusinessEntity
{
...
}
public class Customer : BusinessEntity
{
...
}
public interface IEntityManager <T> where T : BusinessEntity
{
T SaveData(T oData);
}
public CustomerEntityManager : IEntityManager <Customer>
{
Customer SaveData(Customer o)
{
...
}
}
Я вынужден загрузить вышеуказанную сборку (по нескольким очевидным причинам) в моем текущем проекте посредством отражения и создания экземпляра CustomersEntityManager
. Представьте, что я пишу метод следующим образом:
public class EntityFactory
{
public static IEntityManager<BusinessEntity> GetManagerInstance(string EntityName)
{
var asm = GetAssembly(); // imagine that I loaded the assembly somehow
EntityName = "Customer"; // just imagine
object o;
// DO NOT KNOW WHAT TO WRITE HERE.
return o as IEntityManager<BusinessEntity>; // this needs to be an instance of CustomerEntityManager.
}
}
У меня есть возможность изменить бизнес-сборку. Но создание экземпляра должно быть в моем текущем проекте, и я должен загрузить бизнес-сборку, используя отражение. Все типы данных будут известны только во время выполнения.
Возможно, я упускаю некоторые фундаментальные вещи или, возможно, неправильно пишу. Пожалуйста, помогите мне в этом.
UPDATE:
последовал совет "driss", вроде следующего:
string fullTypeName = "Your.Namespace." + EntityName + "EntityManager";
object o = Activator.CreateInstance(asm.FullName, fullTypeName);
Похоже, он создал экземпляр. Однако это привело к ошибке:
Невозможно привести 'o' (который имеет фактический тип 'CustomerEntityManager') к 'IEntityManager'
когда выполняется следующая инструкция:
return o as IEntityManager<BusinessEntity>
Спасибо