예제 #1
0
        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);
        }
예제 #2
0
        /// <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);
            }
        }
예제 #3
0
        /// <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);
            }
        }
예제 #4
0
        /// <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);
        }
예제 #5
0
        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());
        }
예제 #6
0
        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);
            }
        }
예제 #7
0
 protected VeeamO365Client(HttpClient client, Uri baseAddress, IDataTransferObjectResolver dtoResolver, IMapper mapper) : base(client)
 {
     Setup(client, baseAddress, dtoResolver, mapper);
 }
예제 #8
0
 public DataTransferObjectResolverTests()
 {
     _resolver = new DataTransferObjectResolver();
 }