Я пытаюсь создать реальное приложение, используя это руководство в качестве основы для фреймворка. Я понимаю MVC, но я новичок во всем мире IOC / NHibernate. Прочитав несколько вопросов и ответов здесь, в SO, я подумываю добавить слой Service между контроллером и хранилищем, так как я добавлю некоторые проверки бизнес-правил в будущем.
Источник на github также имеет 'ServiceInstaller', который оказался действительно полезным, так как позволяет мне добавлять любые приложения в приложение, т.е.
public void Install(IWindsorContainer container, IConfigurationStore store)
{
container.Register(AllTypes.FromThisAssembly().Pick()
.If(Component.IsInSameNamespaceAs<SectionService>())
.Configure(c => c.LifeStyle.Transient)
.WithService.DefaultInterface());
}
Мой вопрос относится к этому учебнику, и в основном я не уверен, что ISession (который является UoW) передается со слоя Service в Репозиторий или есть другой подход.
Вот что у меня есть:
// Controller
public class SectionsController : Controller
{
public ILogger Logger { get; set; }
private readonly ISectionService sectionService;
public SectionsController(ISectionService sectionService)
{
this.sectionService = sectionService;
}
public ActionResult Index()
{
return View(sectionService.FindAll());
}
// other action methods
}
// Service Layer
public class SectionService : ISectionService
{
private ISectionRepository repository;
public SectionService(ISession session)
{
this.repository = new SectionRepository(session);
}
public IQueryable<Section> FindAll()
{
return repository.FindAll();
}
// other methods
}
// Repository
public class SectionRepository : ISectionRepository
{
private readonly ISession session;
public SectionRepository(ISession session)
{
this.session = session;
}
public IQueryable<Section> FindAll()
{
return session.QueryOver<Section>().List().AsQueryable();
}
// other CRUD methods
}
Это правильный способ реализовать это?