示例#1
0
        private static void ValideParametrosDeInicializacao(ParametrosDeInicializacao parametrosDeInicializacao)
        {
            if (string.IsNullOrWhiteSpace(parametrosDeInicializacao.NomeDoBancoDeDados))
            {
                throw new Exception("O endereço do banco de dados não foi informado na inicialização da infraestrutura.");
            }

            if (string.IsNullOrWhiteSpace(parametrosDeInicializacao.EnderecoDoBancoDeDados))
            {
                throw new Exception("O endereço do banco de dados não foi informado na inicialização da infraestrutura.");
            }
        }
示例#2
0
        public static void InicializarInfraestrutura()
        {
            var parametrosDeInicializacao = new ParametrosDeInicializacao
            {
                EnderecoDeBackupDoBancoDeDados = "c:/ravendb-backup",
                EnderecoDoBancoDeDados         = "http://localhost:8080",
                NomeDoAssemblyDaValidacao      = "ComercioOnline.Validacao",
                NomeDoAssemblyDoRepositorio    = "ComercioOnline.Repositorio",
                NomeDoAssemblyDoServico        = "ComercioOnline.Servico",
                NomeDoBancoDeDados             = "ComercioOnline"
            };

            Inicializar.Inicialize(parametrosDeInicializacao);
        }
示例#3
0
        public override void InicializarInfraestrutura()
        {
            var parametrosDeInicializacao = new ParametrosDeInicializacao
            {
                EnderecoDeBackupDoBancoDeDados = "c:/ravendb-backup",
                EnderecoDoBancoDeDados         = "http://localhost:8080",
                NomeDoAssemblyDaValidacao      = "dn32.infraestrutura.testes",
                NomeDoAssemblyDoRepositorio    = "dn32.infraestrutura.testes",
                NomeDoAssemblyDoServico        = "dn32.infraestrutura.testes",
                NomeDoBancoDeDados             = "bd-teste"
            };

            Inicializar.Inicialize(parametrosDeInicializacao);
        }
示例#4
0
        public static void Inicialize(ParametrosDeInicializacao parametrosDeInicializacao)
        {
            lock (TravaDeInicializacao)
            {
                if (Inicializado)
                {
                    return;
                }

                ValideParametrosDeInicializacao(parametrosDeInicializacao);
                Compartilhado.ParametrosDeInicializacao = parametrosDeInicializacao;

                DicionarioDeServico     = new Dictionary <string, Type>();
                DicionarioDeRepositorio = new Dictionary <string, Type>();
                DicionarioDeValidacao   = new Dictionary <string, Type>();

                var enderecoBase             = Directory.GetCurrentDirectory(); // Path.GetDirectoryName(Assembly.GetEntryAssembly().Location);
                var enderecoDaDllDervico     = $"{enderecoBase}\\{parametrosDeInicializacao.NomeDoAssemblyDoServico}.dll";
                var enderecoDaDllValidacao   = $"{enderecoBase}\\{parametrosDeInicializacao.NomeDoAssemblyDaValidacao}.dll";
                var enderecoDaDllREpositorio = $"{enderecoBase}\\{parametrosDeInicializacao.NomeDoAssemblyDoRepositorio}.dll";

                if (!File.Exists(enderecoDaDllDervico))
                {
                    throw new Exception($"Não foi possível encontrar a dll do serviço em {enderecoDaDllDervico}. Provavelmente o nome do serviço não foi informado corretamente na inicialização da infraestrutura.");
                }

                if (!File.Exists(enderecoDaDllValidacao))
                {
                    throw new Exception($"Não foi possível encontrar a dll da validação em {enderecoDaDllDervico}. Provavelmente o nome da validação não foi informado corretamente na inicialização da infraestrutura.");
                }

                if (!File.Exists(enderecoDaDllREpositorio))
                {
                    throw new Exception($"Não foi possível encontrar a dll do repositório em {enderecoDaDllDervico}. Provavelmente o nome do repositório não foi informado corretamente na inicialização da infraestrutura.");
                }

                Assembly dllServico     = Assembly.Load(AssemblyLoadContext.GetAssemblyName(enderecoDaDllDervico));
                Assembly dllValidacao   = Assembly.Load(AssemblyLoadContext.GetAssemblyName(enderecoDaDllValidacao));
                Assembly dllRepositorio = Assembly.Load(AssemblyLoadContext.GetAssemblyName(enderecoDaDllREpositorio));

                var servicos     = dllServico.GetTypes().Where(p => p.GetTypeInfo().GetCustomAttribute(typeof(ServicoDeAttribute), true) != null).ToList();
                var validacoes   = dllValidacao.GetTypes().Where(p => p.GetTypeInfo().GetCustomAttribute(typeof(ValidacaoDeAttribute), true) != null).ToList();
                var repositorios = dllRepositorio.GetTypes().Where(p => p.GetTypeInfo().GetCustomAttribute(typeof(RepositorioDeAttribute), true) != null).ToList();

                foreach (var type in servicos)
                {
                    var entidade = ((ServicoDeAttribute)type.GetTypeInfo().GetCustomAttribute(typeof(ServicoDeAttribute))).TipoDeEntidade;
                    if (DicionarioDeServico.ContainsKey(entidade.Name))
                    {
                        throw new Exception($"O serviço {entidade.Name} foi declarado mais de uma vez. Verifique declarações do tipo [ServicoDe(typeof({entidade.Name}))]");
                    }

                    DicionarioDeServico.Add(entidade.Name, type);
                }

                foreach (var type in validacoes)
                {
                    var entidade = ((ValidacaoDeAttribute)type.GetTypeInfo().GetCustomAttribute(typeof(ValidacaoDeAttribute))).TipoDeEntidade;
                    if (DicionarioDeValidacao.ContainsKey(entidade.Name))
                    {
                        throw new Exception($"A validação {entidade.Name} foi declarado mais de uma vez. Verifique declarações do tipo [ValidacaoDe(typeof({entidade.Name}))]");
                    }

                    DicionarioDeValidacao.Add(entidade.Name, type);
                }

                foreach (var type in repositorios)
                {
                    var entidade = ((RepositorioDeAttribute)type.GetTypeInfo().GetCustomAttribute(typeof(RepositorioDeAttribute))).TipoDeEntidade;
                    if (DicionarioDeRepositorio.ContainsKey(entidade.Name))
                    {
                        throw new Exception($"O repositório {entidade.Name} foi declarado mais de uma vez. Verifique declarações do tipo [RepositorioDe(typeof({entidade.Name}))]");
                    }

                    DicionarioDeRepositorio.Add(entidade.Name, type);
                }

                Inicializado = true;
            }
        }