public SyncAsyncDefiner(WhatItShouldBe whatItShouldBe) { if (whatItShouldBe.HasFlag(WhatItShouldBe.IsSync)) { BaseGenericDtoType = typeof(EfGenericDto <,>); _serviceReplaceString = UpdateServiceReplaceString; _serviceAssemblyQualifiedName = UpdateServiceAssemblyQualifiedName; } else if (whatItShouldBe.HasFlag(WhatItShouldBe.IsAsync)) { BaseGenericDtoType = typeof(EfGenericDtoAsync <,>); _serviceReplaceString = UpdateServiceAsyncReplaceString; _serviceAssemblyQualifiedName = UpdateServiceAsyncAssemblyQualifiedName; } else { throw new InvalidOperationException("Neither the IsSync or the IsAsync flags were set."); } //If any type allowed we test against base if (!whatItShouldBe.HasFlag(WhatItShouldBe.SpecificDto)) { BaseGenericDtoType = typeof(EfGenericDtoBase <,>); } }
/// <summary> /// This decodes the type and returns an array of types. If the type is based on a GenericDto /// then it returns the Data type and the /// </summary> /// <typeparam name="TD"></typeparam> /// <param name="whatItShouldBe"></param> /// <param name="syncAsync"></param> /// <returns></returns> private static Type[] GetTypesFromInitialType <TD>(WhatItShouldBe whatItShouldBe, SyncAsyncDefiner syncAsync) where TD : class { var classType = typeof(TD); Type[] dataTypes; if (classType.IsSubclassOf(typeof(EfGenericDtoBase))) { dataTypes = GetGenericTypesIfCorrectGeneric(classType, syncAsync.BaseGenericDtoType); if (dataTypes == null) { throw new InvalidOperationException(string.Format("This service needs a class which inherited from {0}.", syncAsync.BaseGenericDtoType.Name)); } } else if (!whatItShouldBe.HasFlag(WhatItShouldBe.DataClass)) { throw new InvalidOperationException("This type of service only works with some form of EfGenericDto."); } else { //Its a data class dataTypes = new[] { typeof(TD) }; } return(dataTypes); }