У меня есть веб-сайт asp.net-mvc, и я использую ninject для IOC и nhibernate для своего сопоставления ORM
Вот мой код привязки IOC:
internal class ServiceModule : NinjectModule
{
public override void Load()
{
Bind(typeof(IIntKeyedRepository<>)).To(typeof(Repository<>)).InRequestScope();
}
}
и вотпример того, как я делаю IOC в коде моего контроллера:
public FAQController(IIntKeyedRepository<FAQ> faqRepository, IUnitOfWork unitOfWork)
{
_faqRepository = faqRepository;
_unitOfWork = unitOfWork;
}
Проблема в том, что до сих пор каждый контроллер имел одну таблицу, на которую он указывал, поэтому мне нужно было только передать класс репозитория вэто ...
Теперь у меня есть несколько таблиц и классов, у которых всего 2 поля:
для каждого из этих классов я просто наследую от базового класса с именем:
BaseModel
, который просто:
public class BaseModel
{
public virtual string Name { get; set; }
public virtual int Id { get; set; }
}
Я хочу иметь один:
StaticDataController
класс, который может делать все CRUD для каждого класса, который просто наследуется от BaseModel (без дополнительных полей)
Глупо простым способом было бы сделать это:
private readonly IIntKeyedRepository<Object1> _object1Repository;
private readonly IIntKeyedRepository<Object2> _object2Repository;
private readonly IIntKeyedRepository<Object3> _object3Repository;
private readonly IIntKeyedRepository<Object4> _object4Repository;
private readonly IIntKeyedRepository<Object5> _object5Repository;
public StaticDataController(IIntKeyedRepository<Object1> obj1Repository, IIntKeyedRepository<Object2> obj2Repository, IIntKeyedRepository<Object3> obj3Repository, IIntKeyedRepository<Object4> obj4Repository, IIntKeyedRepository<Object5> obj5Repository)
{
_obj1Repository= obj1Repository;
_obj2Repository= obj2Repository;
_obj3Repository= obj3Repository;
_obj4Repository= obj4Repository;
_obj5Repository= obj5Repository;
}
Так как я передаю таблицу в качестве параметра моим методам, мне нужно иметь какое-то выражение switch в моей контроллер, чтобы получить правильный класс репозитория на основе строки параметра.
Я предполагаю, что должен быть намного более элегантный способ поддержать то, что я пытаюсь сделать, поэтому я хотел посмотреть, есть ли лучшая практиказдесь (наследование контроллера, рефлексия и т. д.)?