/// <summary> /// Adds Kind /// </summary> /// <param name="viewModel">Injected <see cref="AddKind"/></param> /// <returns>Instance of <see cref="Task{ViewKind}"/></returns> public async Task <ViewKind> AddKind(AddKind @viewModel) { await CheckName(@viewModel); Kind @Kind = new() { Name = @viewModel.Name, ImageUri = @viewModel.ImageUri }; try { await Context.Kind.AddAsync(@Kind); await Context.SaveChangesAsync(); } catch (DbUpdateConcurrencyException) { await CheckName(@viewModel); } // Log string @logData = @Kind.GetType().Name + " with Id " + @Kind.Id + " was added at " + DateTime.Now.ToShortTimeString(); Logger.WriteInsertItemLog(@logData); return(Mapper.Map <ViewKind>(@Kind)); }
/// <summary> /// Checks Name /// </summary> /// <param name="viewModel">Injected <see cref="AddKind"/></param> /// <returns>Instance of <see cref="Task{Kind}"/></returns> public async Task <Kind> CheckName(AddKind @viewModel) { Kind @Kind = await Context.Kind .TagWith("CheckName") .AsNoTracking() .FirstOrDefaultAsync(x => x.Name == @viewModel.Name); if (@Kind != null) { // Log string @logData = @Kind.GetType().Name + " with Name " + @Kind.Name + " was already found at " + DateTime.Now.ToShortTimeString(); Logger.WriteGetItemFoundLog(@logData); throw new Exception(@Kind.GetType().Name + " with Name " + @viewModel.Name + " already exists"); } return(@Kind); }
private static IServiceCollection AddInterceptableCore(this IServiceCollection services, Type serviceType, Type implementationType, ServiceLifetime lifetime, AddKind kind) { Guard.ArgumentNotNull(services, nameof(services)); Guard.ArgumentNotNull(serviceType, nameof(serviceType)); Guard.ArgumentNotNull(implementationType, nameof(implementationType)); if (serviceType.IsGenericTypeDefinition) { if (!services.Any(it => it.ServiceType == typeof(ICodeGeneratorFactory))) { throw new InvalidOperationException("IServiceCollection's AddInterception method must be called before register open generic service type."); } if (_codeGeneratorFactory == null) { var provider = services.BuildServiceProvider(); _codeGeneratorFactory = provider.GetRequiredService <ICodeGeneratorFactory>(); _interceptorResolver = provider.GetRequiredService <IInterceptorResolver>(); } if (serviceType != implementationType) { services.AddTransient(implementationType, implementationType); } } switch (kind) { case AddKind.AlwaysAdd: { if (serviceType.IsGenericTypeDefinition) { services.Add(new GenericInterceptableServiceDescriptor(_codeGeneratorFactory, _interceptorResolver, serviceType, implementationType, lifetime)); } else { services.Add(new InterceptableServiceDescriptor(serviceType, implementationType, lifetime)); } break; } case AddKind.TryAdd: { if (serviceType.IsGenericTypeDefinition) { services.TryAdd(new GenericInterceptableServiceDescriptor(_codeGeneratorFactory, _interceptorResolver, serviceType, implementationType, lifetime)); } else { services.TryAdd(new InterceptableServiceDescriptor(serviceType, implementationType, lifetime)); } break; } case AddKind.TryAddEnumerable: { if (!services.OfType <IInterceptableServiceDescriptor>().Any(it => it.TargetType == implementationType)) { if (serviceType.IsGenericTypeDefinition) { services.TryAddEnumerable(new GenericInterceptableServiceDescriptor(_codeGeneratorFactory, _interceptorResolver, serviceType, implementationType, lifetime)); } else { services.TryAddEnumerable(new InterceptableServiceDescriptor(serviceType, implementationType, lifetime)); } } break; } } return(services); }