public static void BuilderResource(object resource, HttpRequestMessage request) { IEnumerable enumerable = resource as IEnumerable; Type dtoType; if (enumerable == null) { dtoType = resource.GetType(); } else { dtoType = resource.GetType().GetGenericArguments()[0]; } if (dtoType.BaseType != typeof(RestResource)) { throw new ArgumentException($"Era esperado um RestResource, porém, foi informado um {resource.GetType().FullName}"); } Assembly currentAssembly = Assembly.GetExecutingAssembly(); IResourceBuilder resourceBuilder = (IResourceBuilder)Activator.CreateInstance(currentAssembly.GetType($"TreinaWeb.MyApi.Api.HATEOAS.ResourceBuilders.Impl.{dtoType.Name}ResourceBuilder")); if (enumerable == null) { resourceBuilder.BuilderResource(resource, request); } else { foreach (var item in enumerable) { resourceBuilder.BuilderResource(item, request); } } }