本文整理汇总了C#中CodeWriter.i方法的典型用法代码示例。如果您正苦于以下问题:C# CodeWriter.i方法的具体用法?C# CodeWriter.i怎么用?C# CodeWriter.i使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类CodeWriter
的用法示例。
在下文中一共展示了CodeWriter.i方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: GenerateRefCode
private void GenerateRefCode(
Type type, CodeWriter.CodeWriter w, Type[] baseTypes,
Tuple<Type, List<Tuple<MethodInfo, Tuple<string, string>>>>[] typeInfos)
{
// NoReply Interface
var baseNoReplys = baseTypes.Select(t => Utility.GetNoReplyInterfaceName(t));
var baseNoReplysInherit = baseNoReplys.Any() ? " : " + string.Join(", ", baseNoReplys) : "";
using (w.B($"public interface {Utility.GetNoReplyInterfaceName(type)}{type.GetGenericParameters()}{baseNoReplysInherit}{type.GetGenericConstraintClause()}"))
{
foreach (var m in typeInfos.First().Item2)
{
var method = m.Item1;
var parameters = method.GetParameters();
var paramStr = string.Join(", ", parameters.Select(p => p.GetParameterDeclaration(true)));
w._($"void {method.Name}{method.GetGenericParameters()}({paramStr}){method.GetGenericConstraintClause()};");
}
}
// ActorRef
var refClassName = Utility.GetActorRefClassName(type);
var refClassGenericName = refClassName + type.GetGenericParameters();
var noReplyInterfaceName = Utility.GetNoReplyInterfaceName(type);
var noReplyInterfaceGenericName = noReplyInterfaceName + type.GetGenericParameters();
using (w.B($"public class {refClassName}{type.GetGenericParameters()} : InterfacedActorRef, {type.GetSymbolDisplay()}, {noReplyInterfaceName}{type.GetGenericParameters()}{type.GetGenericConstraintClause()}"))
{
// InterfaceType property
w._($"public override Type InterfaceType => typeof({type.GetSymbolDisplay()});");
w._();
// Constructors
using (w.B($"public {refClassName}() : base(null)"))
{
}
using (w.B($"public {refClassName}(IRequestTarget target) : base(target)"))
{
}
using (w.B($"public {refClassName}(IRequestTarget target, IRequestWaiter requestWaiter, TimeSpan? timeout = null) : base(target, requestWaiter, timeout)"))
{
}
// With Helpers
using (w.B($"public {noReplyInterfaceGenericName} WithNoReply()"))
{
w._("return this;");
}
using (w.B($"public {refClassGenericName} WithRequestWaiter(IRequestWaiter requestWaiter)"))
{
w._($"return new {refClassGenericName}(Target, requestWaiter, Timeout);");
}
using (w.B($"public {refClassGenericName} WithTimeout(TimeSpan? timeout)"))
{
w._($"return new {refClassGenericName}(Target, RequestWaiter, timeout);");
}
// IInterface message methods
foreach (var t in typeInfos)
{
var payloadTableClassName = Utility.GetPayloadTableClassName(t.Item1) + type.GetGenericParameters();
foreach (var m in t.Item2)
{
var method = m.Item1;
var payloadTypes = m.Item2;
var parameters = method.GetParameters();
var parameterTypeNames = string.Join(", ", parameters.Select(p => p.GetParameterDeclaration(true)));
var parameterInits = string.Join(", ", parameters.Select(Utility.GetParameterAssignment));
var returnType = method.ReturnType.GenericTypeArguments.FirstOrDefault();
// Request Methods
var returnTaskType = (returnType != null) ? $"Task<{returnType.GetSymbolDisplay(true)}>" : "Task";
var prototype = $"public {returnTaskType} {method.Name}{method.GetGenericParameters()}({parameterTypeNames}){method.GetGenericConstraintClause()}";
using (w.B(prototype))
{
using (w.i("var requestMessage = new RequestMessage {", "};"))
{
w._($"InvokePayload = new {payloadTableClassName}.{payloadTypes.Item1}{method.GetGenericParameters()} {{ {parameterInits} }}");
}
if (returnType != null)
w._($"return SendRequestAndReceive<{returnType.GetSymbolDisplay(true)}>(requestMessage);");
else
w._($"return SendRequestAndWait(requestMessage);");
}
}
}
// IInterface_NoReply message methods
//.........这里部分代码省略.........
示例2: GeneratePayloadCode
private void GeneratePayloadCode(
Type type, CodeWriter.CodeWriter w,
List<Tuple<MethodInfo, Tuple<string, string>>> method2PayloadTypeNames)
{
var tagName = Utility.GetActorInterfaceTagName(type);
w._($"[PayloadTable(typeof({type.GetSymbolDisplay(typeless: true)}), PayloadTableKind.Request)]");
using (w.B($"public static class {Utility.GetPayloadTableClassName(type)}{type.GetGenericParameters()}{type.GetGenericConstraintClause()}"))
{
// generate GetPayloadTypes method
using (w.B("public static Type[,] GetPayloadTypes()"))
{
using (w.i("return new Type[,] {", "};"))
{
foreach (var m in method2PayloadTypeNames)
{
var genericParameters = m.Item1.GetGenericParameters(typeless: true);
var payloadTypes = m.Item2;
var returnType = payloadTypes.Item2 != "" ? $"typeof({payloadTypes.Item2}{genericParameters})" : "null";
w._($"{{ typeof({payloadTypes.Item1}{genericParameters}), {returnType} }},");
}
}
}
// generate payload classes for all methods
foreach (var m in method2PayloadTypeNames)
{
var method = m.Item1;
var payloadTypes = m.Item2;
var returnType = method.ReturnType.GenericTypeArguments.FirstOrDefault();
var observerParameters = method.GetParameters()
.Select(p => Tuple.Create(p, Utility.GetReachableMemebers(p.ParameterType, Utility.IsObserverInterface).ToArray()))
.Where(i => i.Item2.Length > 0)
.ToArray();
// Invoke payload
if (Options.UseProtobuf)
w._("[ProtoContract, TypeAlias]");
var tagOverridable = tagName != null ? ", IPayloadTagOverridable" : "";
var observerUpdatable = observerParameters.Any() ? ", IPayloadObserverUpdatable" : "";
using (w.B($"public class {payloadTypes.Item1}{method.GetGenericParameters()}",
$": IInterfacedPayload, IAsyncInvokable{tagOverridable}{observerUpdatable}{method.GetGenericConstraintClause()}"))
{
// Parameters
var parameters = method.GetParameters();
for (var i = 0; i < parameters.Length; i++)
{
var parameter = parameters[i];
var attr = "";
var defaultValueExpression = "";
if (Options.UseProtobuf)
{
var defaultValueAttr =
parameter.HasNonTrivialDefaultValue()
? $", DefaultValue({parameter.DefaultValue.GetValueLiteral()})"
: "";
attr = $"[ProtoMember({i + 1}){defaultValueAttr}] ";
if (parameter.HasNonTrivialDefaultValue())
{
defaultValueExpression = " = " + parameter.DefaultValue.GetValueLiteral();
}
}
var typeName = parameter.ParameterType.GetSymbolDisplay(true);
w._($"{attr}public {typeName} {parameter.Name}{defaultValueExpression};");
}
if (parameters.Any())
w._();
// GetInterfaceType
using (w.B($"public Type GetInterfaceType()"))
{
w._($"return typeof({type.GetSymbolDisplay()});");
}
// InvokeAsync
if (Options.UseSlimClient)
{
using (w.B("public Task<IValueGetable> InvokeAsync(object __target)"))
{
w._("return null;");
}
}
else
{
using (w.B("public async Task<IValueGetable> InvokeAsync(object __target)"))
{
var parameterNames = string.Join(", ", method.GetParameters().Select(p => p.Name));
if (returnType != null)
{
w._($"var __v = await (({type.GetSymbolDisplay()})__target).{method.Name}{method.GetGenericParameters()}({parameterNames});",
//.........这里部分代码省略.........
示例3: GeneratePayloadCode
private void GeneratePayloadCode(
Type type, CodeWriter.CodeWriter w,
List<Tuple<MethodInfo, string>> method2PayloadTypeNames)
{
w._($"[PayloadTable(typeof({type.GetSymbolDisplay(typeless: true)}), PayloadTableKind.Notification)]");
using (w.B($"public static class {Utility.GetPayloadTableClassName(type)}{type.GetGenericParameters()}{type.GetGenericConstraintClause()}"))
{
// generate GetPayloadTypes method
using (w.B("public static Type[] GetPayloadTypes()"))
{
using (w.i("return new Type[] {", "};"))
{
foreach (var m in method2PayloadTypeNames)
{
var genericParameters = m.Item1.GetGenericParameters(typeless: true);
w._($"typeof({m.Item2}{genericParameters}),");
}
}
}
// generate payload classes for all methods
foreach (var m in method2PayloadTypeNames)
{
var method = m.Item1;
var payloadTypeName = m.Item2;
// Invoke payload
if (Options.UseProtobuf)
w._("[ProtoContract, TypeAlias]");
using (w.B($"public class {payloadTypeName}{method.GetGenericParameters()} : IInterfacedPayload, IInvokable{method.GetGenericConstraintClause()}"))
{
// Parameters
var parameters = method.GetParameters();
for (var i = 0; i < parameters.Length; i++)
{
var parameter = parameters[i];
var attr = "";
var defaultValueExpression = "";
if (Options.UseProtobuf)
{
var defaultValueAttr =
parameter.HasNonTrivialDefaultValue()
? $", DefaultValue({parameter.DefaultValue.GetValueLiteral()})"
: "";
attr = $"[ProtoMember({i + 1}){defaultValueAttr}] ";
if (parameter.HasNonTrivialDefaultValue())
{
defaultValueExpression = " = " + parameter.DefaultValue.GetValueLiteral();
}
}
var typeName = parameter.ParameterType.GetSymbolDisplay(true);
w._($"{attr}public {typeName} {parameter.Name}{defaultValueExpression};");
}
if (parameters.Any())
w._();
// GetInterfaceType
using (w.B("public Type GetInterfaceType()"))
{
w._($"return typeof({type.GetSymbolDisplay()});");
}
// Invoke
using (w.B("public void Invoke(object __target)"))
{
var parameterNames = string.Join(", ", method.GetParameters().Select(p => p.Name));
w._($"(({type.GetSymbolDisplay()})__target).{method.Name}{method.GetGenericParameters()}({parameterNames});");
}
}
}
}
}