protected VeeamO365Client(HttpClient client, Uri baseAddress, IDataTransferObjectResolver dtoResolver) : base(client) { var serviceContainer = DiContainer.Create(this, dtoResolver); var mapper = Mapping.Create(dtoResolver, serviceContainer); Setup(client, baseAddress, dtoResolver, mapper); }
/// <summary> /// Mappings between api response DTOs and domain objects. /// We use reflection based on class attribute to map them. /// </summary> /// <param name="dtoResolver"></param> public DtoMappingProfile(IDataTransferObjectResolver dtoResolver) { var domainObjects = dtoResolver .GetTypesWithDataTransferObjectAttribute(Assembly.GetExecutingAssembly()); foreach (var domainObject in domainObjects) { var dtoType = dtoResolver.GetDataTransferObject(domainObject); CreateMap(dtoType, domainObject) .ConstructUsingServiceLocator(); CreateMap(domainObject, dtoType); } }
/// <summary> /// Initialize dependency injection container. /// </summary> /// <param name="client">Parent <see cref="VeeamO365Client"/> client.</param> /// <param name="dtoResolver">Resolver, that finds classes with specific attribute.</param> /// <returns>Dependency injection container.</returns> /// <exception cref="InvalidOperationException">Thrown, when container was already initialized.</exception> public static IContainer Create(VeeamO365Client client, IDataTransferObjectResolver dtoResolver) { lock (Lock) { if (_container != null) { throw new InvalidOperationException("Container was already created."); } _container = CreateContainer(client, dtoResolver); return(_container); } }
/// <summary> /// Class initialization. /// </summary> /// <param name="client"></param> /// <param name="baseAddress"></param> /// <param name="dtoResolver"></param> /// <param name="mapper"></param> private void Setup(HttpClient client, Uri baseAddress, IDataTransferObjectResolver dtoResolver, IMapper mapper) { _httpClient = client; _baseAddress = baseAddress; _dtoResolver = dtoResolver; _mapper = mapper; BackupRepositories = new BackupRepositoryClient(this); Jobs = new JobClient(this); Mailboxes = new MailboxClient(this); OneDrives = new OneDriveClient(this); Organizations = new OrganizationClient(this); OrganizationUsers = new OrganizationUserClient(this); OrganizationSites = new OrganizationSiteClient(this); OrganizationGroups = new OrganizationGroupClient(this); SharePoints = new SharePointClient(this); RestoreSessions = new RestoreSessionClient(this); LicensedUsers = new LicensedUserClient(this); }
private static IContainer CreateContainer(VeeamO365Client client, IDataTransferObjectResolver dtoResolver) { var builder = new ContainerBuilder(); builder.RegisterInstance(client); builder.RegisterInstance <IVeeamO365Client>(client); builder.RegisterAssemblyTypes(Assembly.GetExecutingAssembly()) .Except <VeeamO365Client>() .PublicOnly(); var genericTypes = Assembly.GetExecutingAssembly().GetTypes().Where(x => x.IsGenericType); foreach (var genericType in genericTypes) { builder.RegisterGeneric(genericType); } return(builder.Build()); }
public static IMapper Create(IDataTransferObjectResolver dtoResolver, IContainer serviceContainer) { lock (Lock) { if (_mapper != null) { throw new InvalidOperationException("Mapper was already created."); } var mappings = new MapperConfigurationExpression { ShouldMapProperty = p => p.GetMethod.IsPublic || p.GetMethod.IsAssembly, ShouldMapField = f => true }; mappings.ConstructServicesUsing(serviceContainer.Resolve); mappings.AddProfile(new DtoMappingProfile(dtoResolver)); var config = new MapperConfiguration(mappings); var mapper = new Mapper(config); _mapper = mapper; return(_mapper); } }
protected VeeamO365Client(HttpClient client, Uri baseAddress, IDataTransferObjectResolver dtoResolver, IMapper mapper) : base(client) { Setup(client, baseAddress, dtoResolver, mapper); }
public DataTransferObjectResolverTests() { _resolver = new DataTransferObjectResolver(); }