示例#1
0
        internal DuckTypeIssueClassGenerator(StringBuilder classBuilder, DuckInterface proxyInterface, string implementationName)
        {
            Builder                = classBuilder;
            ImplementationName     = implementationName + "_";
            ProxyInterfaceFullName = proxyInterface.FullName;
            SyntaxClassRequired    = proxyInterface.SyntaxClassRequired;

            if (!SyntaxClassRequired)
            {
                return;
            }

            Builder.AppendLine(@"using NetRuntimeSystem = System;");
            Builder.AppendLine(@"using System;");
            Builder.AppendLine(@"using System.Collections.Generic;");
            Builder.AppendLine(@"using NetOffice;");
            Builder.AppendLine(@"namespace NetOffice.DuckTyping");
            Builder.AppendLine("{");

            Builder.AppendLine("\tpublic class " + ImplementationName + " : COMObject");
            Builder.AppendLine("\t{");


            Builder.AppendLine("\t\t#region Ctor");
            Builder.AppendLine("");
            Builder.AppendLine("\t\tpublic " + ImplementationName + "(Core factory, ICOMObject parentObject, object proxy) : base(factory, parentObject, proxy)\r\n\t\t{");

            Builder.AppendLine("\t\t}");
            Builder.AppendLine("");
            Builder.AppendLine("\t\t#endregion");
        }
示例#2
0
 internal DuckTypeGenerator(DuckInterface proxyInterface)
 {
     if (null == proxyInterface)
     {
         throw new ArgumentNullException("proxyInterface");
     }
     ProxyInterface = proxyInterface;
 }
        internal DuckTypeClassGenerator(StringBuilder classBuilder, DuckInterface proxyInterface, string implementationName, string issueImplementationName)
        {
            Builder                = classBuilder;
            ImplementationName     = implementationName;
            ProxyInterfaceFullName = proxyInterface.FullName;

            bool eventsSupported = proxyInterface.IsValidEventClass;

            Builder.AppendLine(@"using NetRuntimeSystem = System;");
            Builder.AppendLine(@"using System;");
            Builder.AppendLine(@"using System.Collections;");
            Builder.AppendLine(@"using System.Collections.Generic;");
            Builder.AppendLine(@"using NetOffice;");
            Builder.AppendLine(@"namespace NetOffice.DuckTyping");
            Builder.AppendLine("{");

            Builder.AppendLine("\tpublic class " + ImplementationName + " : " + (proxyInterface.SyntaxClassRequired ? issueImplementationName : "COMObject") + ", " + ProxyInterfaceFullName);
            Builder.AppendLine("\t{");

            if (eventsSupported)
            {
                Builder.AppendLine("\t\t#region Fields");
                Builder.AppendLine("");
                Builder.AppendLine("\t\tprivate static Type _thisType;");
                Builder.AppendLine("\t\tprivate KeyValuePair<string, Type>[] _sinks;");
                Builder.AppendLine("\t\tprivate NetRuntimeSystem.Runtime.InteropServices.ComTypes.IConnectionPoint _connectPoint;");
                Builder.AppendLine("\t\tprivate SinkHelper _activeSink;");
                Builder.AppendLine("\t\tprivate string _activeSinkId;" + Environment.NewLine);
                Builder.AppendLine("\t\t#endregion" + Environment.NewLine);
            }
            else
            {
                Builder.AppendLine("\t\t#region Fields");
                Builder.AppendLine("");
                Builder.AppendLine("\t\tprivate KeyValuePair<string, Type>[] _sinks;");
                Builder.AppendLine("\t\tprivate static Type _thisType;" + Environment.NewLine);
                Builder.AppendLine("\t\t#endregion" + Environment.NewLine);
            }

            Builder.AppendLine("\t\t#region Ctor");
            Builder.AppendLine("");
            Builder.AppendLine("\t\tpublic " + ImplementationName + "(Core factory, ICOMObject parentObject, object proxy) : base(factory, parentObject, proxy)\r\n\t\t{");

            if (eventsSupported)
            {
                Builder.Append("\t\t\t_sinks = new KeyValuePair<string, Type>[]{");
                KeyValuePair <string, Type>[] sinks = proxyInterface.EventSinks;
                for (int i = 0; i < sinks.Length; i++)
                {
                    Builder.Append("new KeyValuePair<string, Type>(" + "\"" + sinks[i].Key + "\"" + ", typeof(" + sinks[i].Value.FullName + "))");
                    if (i < sinks.Length - 1)
                    {
                        Builder.Append(",");
                    }
                }
                Builder.AppendLine("};");
            }
            else
            {
                Builder.AppendLine("\t\t\t_sinks = new KeyValuePair<string, Type>[0];");
            }

            Builder.AppendLine("\t\t}");
            Builder.AppendLine("");
            Builder.AppendLine("\t\t#endregion");

            Builder.AppendLine(Environment.NewLine + "\t\t#region Type Information" + Environment.NewLine);

            Builder.AppendLine("\t\tpublic static Type LateBindingApiWrapperType");
            Builder.AppendLine("\t\t{");
            Builder.AppendLine("\t\t\tget");
            Builder.AppendLine("\t\t\t{");
            Builder.AppendLine("\t\t\t\tif (null == _thisType)");
            Builder.AppendLine("\t\t\t\t\t_thisType = typeof(" + implementationName + ");");
            Builder.AppendLine("\t\t\t\t return _thisType;");
            Builder.AppendLine("\t\t\t}");
            Builder.AppendLine("\t\t}" + Environment.NewLine);

            Builder.AppendLine("\t\tpublic override Type InstanceType");
            Builder.AppendLine("\t\t{");
            Builder.AppendLine("\t\t\tget");
            Builder.AppendLine("\t\t\t{");
            Builder.AppendLine("\t\t\t\treturn LateBindingApiWrapperType;");
            Builder.AppendLine("\t\t\t}");
            Builder.AppendLine("\t\t}" + Environment.NewLine);

            //public static Type LateBindingApiWrapperType

            Builder.AppendLine("\t\t#endregion");
        }