Я умираю здесь, пытаясь реализовать общий репозиторий с моей единицей работы. Это будет хорошо работать с конкретным проектом, над которым я работаю. Но я просто не могу понять правильный синтаксис. Если бы я мог получить только ниже, чтобы работать в качестве отправной точки ...Создайте универсальный репозиторий неизвестного типа во время выполнения
Я хотел бы быть в состоянии сделать
unit_of_work.Repository<don't-know-until-runtime>().Insert(run-time-object);
, где я не буду знать, пока во время выполнения какой-то объект I будет иметь дело, я знаю только, что это будет тип «BaseClass».
Очень ценю вашу помощь. Я попытался свернуть код внизу.
public class BaseClass
{
}
public class SubClass1 : BaseClass
{
public SubClass1()
: base()
{
}
}
public interface IRepository<TEntity> where TEntity : class
{
void Insert(TEntity entity);
}
public class Repository<TEntity> : IRepository<TEntity> where TEntity : class
{
public void Insert(TEntity entity)
{
System.Diagnostics.Debug.WriteLine("got here!!");
}
}
public class UnitOfWork
{
public virtual IRepository<TEntity> Repository<TEntity>() where TEntity : class
{
var type = typeof(TEntity).Name;
var repositoryType = typeof(Repository<>);
return (IRepository<TEntity>) Activator.CreateInstance(repositoryType.MakeGenericType(typeof(TEntity)));
}
}
class Program
{
static void Main(string[] args)
{
UnitOfWork unit_of_work = new UnitOfWork();
SubClass1 testClass1 = new SubClass1();
// this works fine, when I know the type in advance...
unit_of_work.Repository<SubClass1>().Insert(testClass1);
// ... but when I don't know the type, then what?
// (All I know is that the incoming object will be of type BaseClass)
}
}
это C++? можете ли вы пометить вопрос языком? – Bohemian
@Bohemian Я могу и у меня есть, спасибо. –
Я * обычно * обнаруживаю, что когда кто-то идет «Я не буду знать тип здесь», тогда в дизайне есть что-то еще, что неправильно. Заметьте, я сказал ** обычно **. –