Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <p>Here is how I'm using it. I'm using IRepository for all the operations that are common to all of my repositories.</p> <pre><code>public interface IRepository&lt;T&gt; where T : PersistentObject { T GetById(object id); T[] GetAll(); void Save(T entity); } </code></pre> <p>and I use also a dedicated an ITRepository for each <a href="http://dddstepbystep.com/wikis/ddd/aggregate.aspx" rel="nofollow noreferrer">aggregate</a> for the operation that are distinct to this repository. For example for user I will use IUserRepository to add method that are distinct to UserRepository:</p> <pre><code>public interface IUserRepository : IRepository&lt;User&gt; { User GetByUserName(string username); } </code></pre> <p>The implementation will look like this:</p> <pre><code>public class UserRepository : RepositoryBase&lt;User&gt;, IUserRepository { public User GetByUserName(string username) { ISession session = GetSession(); IQuery query = session.CreateQuery("from User u where u.Username = :username"); query.SetString("username", username); var matchingUser = query.UniqueResult&lt;User&gt;(); return matchingUser; } } public class RepositoryBase&lt;T&gt; : IRepository&lt;T&gt; where T : PersistentObject { public virtual T GetById(object id) { ISession session = GetSession(); return session.Get&lt;T&gt;(id); } public virtual T[] GetAll() { ISession session = GetSession(); ICriteria criteria = session.CreateCriteria(typeof (T)); return criteria.List&lt;T&gt;().ToArray(); } protected ISession GetSession() { return new SessionBuilder().GetSession(); } public virtual void Save(T entity) { GetSession().SaveOrUpdate(entity); } } </code></pre> <p>Than in the UserController will look as:</p> <pre><code>public class UserController : ConventionController { private readonly IUserRepository _repository; private readonly ISecurityContext _securityContext; private readonly IUserSession _userSession; public UserController(IUserRepository repository, ISecurityContext securityContext, IUserSession userSession) { _repository = repository; _securityContext = securityContext; _userSession = userSession; } } </code></pre> <p>Than the repository is instantiated using dependency injection pattern using custom controller factory. I'm using <a href="http://structuremap.sourceforge.net/Default.htm" rel="nofollow noreferrer">StructureMap</a> as my dependency injection layer.</p> <p>The database layer is NHibernate. ISession is the gateway to the the database in this session. </p> <p>I'm suggest you to look on <a href="http://code.google.com/p/codecampserver/" rel="nofollow noreferrer">CodeCampServer</a> structure, you can learn a lot from it.</p> <p>Another project that you can learn fro it is <a href="http://whocanhelpme.codeplex.com/" rel="nofollow noreferrer">Who Can Help Me</a>. Which I don't dig enough in it yet.</p>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. VO
      singulars
      1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload