예제 #1
0
        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;
        }
예제 #2
0
        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);
            }
        }
예제 #3
0
 public ForumUnitOfWork(ForumUnitOfWorkBuilder builder)
 {
     this.InitializeFields(builder);
     this.RegisterRepositories(builder);
     this.ResetRepositories();
 }