Example #1
0
        IWorkspace CreateWorkspace()
        {
            var assignableTargets = MakeAssignableEntities(targetObjects, selectedBackendType);

            object[] targetArray = assignableTargets.Any() ?
                                   assignableTargets.ToArray() :
                                   targetObjects != null ?
                                   new object[] { } :
            null;                     // make sure to pass null, NOT an empty array

            var ctorArguments = new object[]
            {
                selectedBackendType,
                targetArray,
                (GetAPI)window.GetAPI,
                (Action)window.Repaint,
                (Action <Action>)window.ExecOnUpdate
            };

            var backendArguments = BackendTypeUtil.GetGenericArguments(selectedBackendType);

            return((IWorkspace)Activator.CreateInstance
                   (
                       typeof(Workspace <,>).MakeGenericType(backendArguments),
                       System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance,
                       null,
                       ctorArguments,
                       null
                   ));
        }
Example #2
0
        static IEnumerable <object> MakeAssignableEntities(IEnumerable <object> objs, Type backendType)
        {
            if (objs == null)
            {
                yield break;
            }

            Type acceptedType = BackendTypeUtil.BackendAttrType(backendType);
            Type entityType   = BackendTypeUtil.GetGenericArguments(backendType)[0];

            foreach (var obj in objs)
            {
                if (acceptedType != null && acceptedType.IsAssignableFrom(obj.GetType()))
                {
                    yield return(obj);
                }
                else
                {
                    yield return(TypeUtil.MakeAssignable(obj, entityType));
                }
            }
        }