예제 #1
0
        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())));
        }
예제 #2
0
    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())));
    }
예제 #3
0
    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);
        }
    }