Ejemplo n.º 1
0
        public void ExecuteMigration()
        {
            List <IMigration> migrations = new List <IMigration>();

            var types = this.GetType().Assembly.GetTypes().Where(t => t.GetInterfaces().Contains(typeof(IMigration)));

            types.ToList().ForEach(t =>
            {
                migrations.Add(System.Activator.CreateInstance(t) as IMigration);
            });

            IDbConnection conn = null;

            try
            {
                conn = DbConnectionFactory.GetDatabaseMysqlConnection();

                var currentVersion = repository.GetMaxVersion();
                if (currentVersion == -1)  //建库
                {
                    var createDbConnection = DbConnectionFactory.GetMysqlConnection();
                    try
                    {
                        var dbCreatorType = this.GetType().Assembly.GetTypes().Where(t => t.GetInterfaces().Contains(typeof(IDbCreator)));
                        var dbCreator     = System.Activator.CreateInstance(dbCreatorType.FirstOrDefault()) as IDbCreator;
                        dbCreator.Execute(createDbConnection);
                    }
                    catch (Exception)
                    {
                    }
                    finally
                    {
                        createDbConnection.Close();
                    }
                }

                migrations.Where(p => p.Version > currentVersion).OrderBy(p => p.Version).ToList().ForEach(migration =>
                {
                    migration.Execute(conn);
                });
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex);
            }
            finally
            {
                if (conn != null)
                {
                    conn.Close();
                }
            }
        }
Ejemplo n.º 2
0
        protected override void Configure()
        {
            var builder = new ContainerBuilder();

            //注册实例
            builder.RegisterType <WindowManager>().As <IWindowManager>().SingleInstance();
            builder.RegisterType <DbConnectionProvider>().As <IDbConnectionProvider>();

            #region 注册View ViewModel
            builder.RegisterType <ShellViewModel>().AsSelf();
            #endregion

            #region 通过程序集注册服务
            //通过程序集注册应用服务和仓储
            var             files = Directory.GetFiles(AppDomain.CurrentDomain.BaseDirectory, "*.dll");
            List <Assembly> list  = new List <Assembly>();
            foreach (var file in files)
            {
                Assembly assembly = Assembly.LoadFile(file);

                if (assembly.FullName.Contains("Application") ||
                    assembly.FullName.Contains("Infrastructure") ||
                    assembly.FullName.Contains("Domain"))
                {
                    list.Add(assembly);
                }
            }
            builder.RegisterAssemblyTypes(list.ToArray()).AsImplementedInterfaces()
            .As <ITransientDependency>();                  //只注册继承自ITransientDependency接口的实例
            builder.RegisterAssemblyTypes(list.ToArray()).AsImplementedInterfaces()
            .As <ISingletonDependency>().SingleInstance(); //注册为单例
            #endregion

            //注册应用程序服务
            builder.RegisterAssemblyTypes(Assembly.GetExecutingAssembly()).AsImplementedInterfaces()
            .As <ITransientDependency>();
            builder.RegisterAssemblyTypes(Assembly.GetExecutingAssembly()).AsImplementedInterfaces()
            .As <ISingletonDependency>().SingleInstance();

            #region 注册仓储
            var dbConnection = DbConnectionFactory.GetDatabaseMysqlConnection();
            builder.RegisterInstance <DbConnection>(dbConnection);
            //注册单元模式
            builder.RegisterType(typeof(UnitOfWork)).AsImplementedInterfaces();
            //注册默认的仓储(泛型类注册)
            builder.RegisterGeneric(typeof(DapperRepositoryBase <>)).As(typeof(IRepository <>));
            #endregion

            this.container = builder.Build();

            var service1 = container.Resolve <IRootSerivce>();
            var service2 = container.Resolve <ITestService>();

            //automapper
            Mapper.Initialize((config) =>
            {
                WordRecoder.Application.MapperCreator.GetProfile().ForEach(p =>
                {
                    config.AddProfile(p);
                });
                MapperCreator.GetProfile().ForEach(p =>
                {
                    config.AddProfile(p);
                });
            });
        }