private ConstructorInfo FindAdapterConstructor(Assembly assembly, ITypeCache typeCache, string modelAdapterTypeName, params object[] ctorParams) { var constructors = typeCache.GetDeclaredConstructors(assembly.GetType(modelAdapterTypeName)); return(constructors.Single(x => x.GetParameters().Count() == ctorParams.Count() && x.GetParameters().Last().ParameterType.GetTypeInfo().IsAssignableFrom(ctorParams.Last().GetType().GetTypeInfo()))); }
private ConstructorInfo FindAdapterConstructor(Type type, ITypeCache typeCache, params object[] ctorParams) { var constructors = typeCache.GetDeclaredConstructors(type); return(constructors.Single(x => x.GetParameters().Length == ctorParams.Length && x.GetParameters().Last().ParameterType.GetTypeInfo().IsAssignableFrom(ctorParams.Last().GetType().GetTypeInfo()))); }
private IODataAdapter LoadAdapter(string adapterAssemblyName, ITypeCache typeCache, string adapterTypeName, params object[] ctorParams) { try { var type = LoadType(adapterAssemblyName, adapterTypeName); var constructors = typeCache.GetDeclaredConstructors(type); var ctor = constructors.Single(x => x.GetParameters().Length == ctorParams.Length && x.GetParameters().Last().ParameterType.IsInstanceOfType(ctorParams.Last())); return(ctor.Invoke(ctorParams) as IODataAdapter); } catch (Exception exception) { throw new InvalidOperationException($"Unable to load OData adapter from assembly {adapterAssemblyName}", exception); } }