private void InitializeFields(ForumUnitOfWorkBuilder builder) { _repositories = new Dictionary <Type, object>(); _repositoryFactories = new Dictionary <Type, Func <object[], object> >(); _dbConnection = builder.DbConnection; if (_dbConnection.State != ConnectionState.Open) { _dbConnection.Open(); } _isolationLevel = builder.IsolationLevel ?? IsolationLevel.ReadCommitted; }
private void RegisterRepositories(ForumUnitOfWorkBuilder builder) { // gather all repositories that implement IRepository in our UnitOfWork class var allReposTypes = this.GetType() .GetProperties(BindingFlags.Public | BindingFlags.Instance) .Where(pi => pi.PropertyType.DoesImplementGeneric(typeof(IRepository <,>))) .Select(p => p.PropertyType); foreach (Type repoType in allReposTypes) { // resolving repos factories from our builder var repoFactory = builder.ResolveDependency(repoType); // get and save repo factory for recreate repo _repositoryFactories.Add(repoType, repoFactory); } }
public ForumUnitOfWork(ForumUnitOfWorkBuilder builder) { this.InitializeFields(builder); this.RegisterRepositories(builder); this.ResetRepositories(); }