Esempio n. 1
0
        private static void RegisterDto(ContainerBuilder containerBuilder)
        {
            var registerDatabaseObject = typeof(Startup).GetMethod(nameof(RegisterDatabaseObject));
            var assemblyDto            = typeof(IStaticDto).Assembly.GetTypes();
            var assemblyDb             = typeof(Account).Assembly.GetTypes();

            assemblyDto.Where(p =>
                              typeof(IDto).IsAssignableFrom(p) &&
                              (!p.Name.Contains("InstanceDto") || p.Name.Contains("Inventory")) && p.IsClass)
            .ToList()
            .ForEach(t =>
            {
                var type = assemblyDb.First(tgo =>
                                            string.Compare(t.Name, $"{tgo.Name}Dto", StringComparison.OrdinalIgnoreCase) == 0);
                var typepk = type.FindKey();
                registerDatabaseObject.MakeGenericMethod(t, type, typepk.PropertyType)
                .Invoke(null, new[] { containerBuilder });
            });

            containerBuilder.RegisterType <ItemInstanceDao>().As <IGenericDao <IItemInstanceDto> >().SingleInstance();

            containerBuilder.Register(c =>
            {
                var dic = new Dictionary <Type, Dictionary <string, Dictionary <RegionType, II18NDto> > >
                {
                    {
                        typeof(I18NItemDto),
                        c.Resolve <IGenericDao <I18NItemDto> >().LoadAll().GroupBy(x => x.Key).ToDictionary(x => x.Key,
                                                                                                            x => x.ToList().ToDictionary(o => o.RegionType, o => (II18NDto)o))
                    }
                };

                var items = c.Resolve <IGenericDao <ItemDto> >().LoadAll().ToList();
                var props = StaticDtoExtension.GetI18NProperties(typeof(ItemDto));

                var regions   = Enum.GetValues(typeof(RegionType));
                var accessors = TypeAccessor.Create(typeof(ItemDto));
                Parallel.ForEach(items, s => s.InjectI18N(props, dic, regions, accessors));
                var staticMetaDataAttribute = typeof(ItemDto).GetCustomAttribute <StaticMetaDataAttribute>();
                if (items.Count != 0)
                {
                    c.Resolve <ILogger>().Information(
                        LogLanguage.Instance.GetMessageFromKey(staticMetaDataAttribute.LoadedMessage),
                        items.Count);
                }
                else
                {
                    c.Resolve <ILogger>()
                    .Error(LogLanguage.Instance.GetMessageFromKey(staticMetaDataAttribute.EmptyMessage));
                }

                return(items);
            })
            .As <List <ItemDto> >()
            .SingleInstance()
            .AutoActivate();
        }
Esempio n. 2
0
        public static void RegisterDatabaseObject <TDto, TDb, TPk>(ContainerBuilder containerBuilder, bool isStatic)
            where TDb : class
            where TPk : struct
        {
            containerBuilder.RegisterType <Dao <TDb, TDto, TPk> >().As <IDao <IDto> >().As <IDao <TDto, TPk> >().SingleInstance();
            if (!isStatic)
            {
                return;
            }

            var staticMetaDataAttribute = typeof(TDto).GetCustomAttribute <StaticMetaDataAttribute>();

            containerBuilder.Register(c =>
            {
                var dic   = c.Resolve <IDictionary <Type, Dictionary <string, Dictionary <RegionType, II18NDto> > > >();
                var items = c.Resolve <IDao <TDto, TPk> >().LoadAll().ToList();
                var props = StaticDtoExtension.GetI18NProperties(typeof(TDto));
                if (props.Count > 0)
                {
                    var regions   = Enum.GetValues(typeof(RegionType));
                    var accessors = TypeAccessor.Create(typeof(TDto));
                    Parallel.ForEach(items, s => ((IStaticDto)s !).InjectI18N(props, dic, regions, accessors));
                }

                if ((items.Count != 0) || (staticMetaDataAttribute == null) ||
                    (staticMetaDataAttribute.EmptyMessage == LogLanguageKey.UNKNOWN))
                {
                    if ((staticMetaDataAttribute != null) &&
                        (staticMetaDataAttribute.LoadedMessage != LogLanguageKey.UNKNOWN))
                    {
                        c.Resolve <ILogger>().Information(
                            LogLanguage.Instance.GetMessageFromKey(staticMetaDataAttribute.LoadedMessage),
                            items.Count);
                    }
                }
                else
                {
                    c.Resolve <ILogger>()
                    .Error(LogLanguage.Instance.GetMessageFromKey(staticMetaDataAttribute.EmptyMessage));
                }

                return(items);
            })
            .As <List <TDto> >()
            .SingleInstance()
            .AutoActivate();
        }
Esempio n. 3
0
        private static void RegisterDto(ContainerBuilder containerBuilder)
        {
            var registerDatabaseObject = typeof(Startup).GetMethod(nameof(RegisterDatabaseObject));
            var assemblyDto            = typeof(IStaticDto).Assembly.GetTypes();
            var assemblyDb             = typeof(Account).Assembly.GetTypes();

            assemblyDto.Where(p =>
                              typeof(IDto).IsAssignableFrom(p) &&
                              (!p.Name.Contains("InstanceDto") || p.Name.Contains("Inventory")) && p.IsClass)
            .ToList()
            .ForEach(t =>
            {
                var type = assemblyDb.First(tgo =>
                                            string.Compare(t.Name, $"{tgo.Name}Dto", StringComparison.OrdinalIgnoreCase) == 0);
                var typepk = type.GetProperties()
                             .Where(s => new NosCoreContext(new DbContextOptionsBuilder <NosCoreContext>().UseInMemoryDatabase(
                                                                Guid.NewGuid().ToString()).Options).Model.FindEntityType(type)
                                    .FindPrimaryKey().Properties.Select(x => x.Name)
                                    .Contains(s.Name)
                                    ).ToArray()[0];
                registerDatabaseObject?.MakeGenericMethod(t, type, typepk !.PropertyType)
                .Invoke(null, new object?[] { containerBuilder });
            });


            containerBuilder.RegisterType <Dao <ItemInstance, IItemInstanceDto?, Guid> >().As <IDao <IItemInstanceDto?, Guid> >().SingleInstance();

            containerBuilder.Register(c =>
            {
                var dic = new Dictionary <Type, Dictionary <string, Dictionary <RegionType, II18NDto> > >
                {
                    {
                        typeof(I18NItemDto),
                        c.Resolve <IDao <I18NItemDto, int> >().LoadAll().GroupBy(x => x.Key).ToDictionary(x => x.Key ?? "",
                                                                                                          x => x.ToList().ToDictionary(o => o.RegionType, o => (II18NDto)o))
                    }
                };

                var items = c.Resolve <IDao <ItemDto, short> >().LoadAll().ToList();
                var props = StaticDtoExtension.GetI18NProperties(typeof(ItemDto));

                var regions   = Enum.GetValues(typeof(RegionType));
                var accessors = TypeAccessor.Create(typeof(ItemDto));
                Parallel.ForEach(items, s => s.InjectI18N(props, dic, regions, accessors));
                var staticMetaDataAttribute = typeof(ItemDto).GetCustomAttribute <StaticMetaDataAttribute>();
                if ((items.Count != 0) || (staticMetaDataAttribute == null) ||
                    (staticMetaDataAttribute.EmptyMessage == LogLanguageKey.UNKNOWN))
                {
                    if ((items.Count != 0) && (staticMetaDataAttribute != null))
                    {
                        c.Resolve <ILogger>().Information(
                            LogLanguage.Instance.GetMessageFromKey(staticMetaDataAttribute.LoadedMessage),
                            items.Count);
                    }
                }
                else
                {
                    c.Resolve <ILogger>()
                    .Error(LogLanguage.Instance.GetMessageFromKey(staticMetaDataAttribute.EmptyMessage));
                }

                return(items);
            })
            .As <List <ItemDto> >()
            .SingleInstance()
            .AutoActivate();
        }