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(); }
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(); }
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(); }