public PluginInterfaces.V2.IIOContainer CreateIOContainer(PluginInterfaces.V2.IIOFactory factory, PluginInterfaces.V2.IOBuildContext context)
        {
            if (context.Direction == PinDirection.Input)
            {
                var t = context.DataType;
                var attribute = context.IOAttribute;
                var container = factory.CreateIOContainer(context.ReplaceIOType(typeof(INodeIn)));

                Type restype = t.GetGenericArguments()[0];
                Type fulltype = typeof(DX11Resource<>).MakeGenericType(restype);
                var stream = Activator.CreateInstance(typeof(DX11ResourceInputStream<,>).MakeGenericType(fulltype, restype), container.RawIOObject) as IInStream;
                IPluginIO io = container.GetPluginIO();

                ResourceListener rl = new ResourceListener(io);

                this.pinconnections.Add(rl.pin, rl);
                return IOContainer.Create(context, stream, container);
            }

            if (context.Direction == PinDirection.Output)
            {
                var t = context.DataType;
                var attribute = context.IOAttribute;
                var container = factory.CreateIOContainer(context.ReplaceIOType(typeof(INodeOut)));

                Type restype = t.GetGenericArguments()[0];
                Type fulltype = typeof(DX11Resource<>).MakeGenericType(restype);
                var stream = Activator.CreateInstance(typeof(DX11ResourceOutputStream<,>).MakeGenericType(fulltype,restype), container.RawIOObject, false) as IOutStream;
                return IOContainer.Create(context, stream, container);
            }

            return null;
        }
        public bool CanCreate(PluginInterfaces.V2.IOBuildContext context)
        {
            if (context.DataType == null) { return false; }
            if (context.DataType.IsGenericType && context.IOType.IsGenericType)
            {
                if ((context.DataType.GetGenericTypeDefinition() == typeof(DX11Resource<>)
                    && context.IOType.GetGenericTypeDefinition() == typeof(IInStream<>)
                    && context.Direction == PinDirection.Input)
                    ||
                    (context.DataType.GetGenericTypeDefinition() == typeof(DX11Resource<>)
                    && context.IOType.GetGenericTypeDefinition() == typeof(IOutStream<>)
                    && context.Direction == PinDirection.Output))
                {
                    return true;
                }
            }

            return false;
        }