protected override void AddGetGrainMethods(GrainInterfaceData iface, CodeTypeDeclaration factoryClass) { RecordReferencedNamespaceAndAssembly(typeof(GrainId)); RecordReferencedNamespaceAndAssembly(iface.Type); var interfaceId = GrainInterfaceData.GetGrainInterfaceId(iface.Type); var interfaceName = iface.InterfaceTypeName; Action <string> add = codeFmt => factoryClass.Members.Add(new CodeSnippetTypeMember( String.Format(codeFmt, FixupTypeName(interfaceName), interfaceId))); bool hasKeyExt = GrainInterfaceData.UsesPrimaryKeyExtension(iface.Type); bool isGuidKey = typeof(IGrainWithGuidKey).IsAssignableFrom(iface.Type); bool isLongKey = typeof(IGrainWithIntegerKey).IsAssignableFrom(iface.Type); bool isStringKey = typeof(IGrainWithStringKey).IsAssignableFrom(iface.Type); bool isDefaultKey = !(isGuidKey || isStringKey || isLongKey); if (isDefaultKey && hasKeyExt) { // the programmer has specified [ExtendedPrimaryKey] on the interface. add( @" Public Shared Function GetGrain(primaryKey as System.Int64, keyExt as System.String) As {0} Return Cast(Global.Orleans.CodeGeneration.GrainFactoryBase.MakeKeyExtendedGrainReferenceInternal(GetType({0}), {1}, primaryKey, keyExt)) End Function"); add( @" Public Shared Function GetGrain(primaryKey as System.Int64, keyExt as System.String, grainClassNamePrefix As System.String) As {0} Return Cast(Global.Orleans.CodeGeneration.GrainFactoryBase.MakeKeyExtendedGrainReferenceInternal(GetType({0}), {1}, primaryKey, keyExt, grainClassNamePrefix)) End Function"); add( @" Public Shared Function GetGrain(primaryKey As System.Guid, keyExt as System.String) As {0} Return Cast(Global.Orleans.CodeGeneration.GrainFactoryBase.MakeKeyExtendedGrainReferenceInternal(GetType({0}), {1}, primaryKey, keyExt)) End Function"); add( @" Public Shared Function GetGrain(primaryKey As System.Guid, keyExt as System.String, grainClassNamePrefix As System.String) As {0} Return Cast(Global.Orleans.CodeGeneration.GrainFactoryBase.MakeKeyExtendedGrainReferenceInternal(GetType({0}), {1}, primaryKey, keyExt,grainClassNamePrefix)) End Function"); } else { // the programmer has not specified [ExplicitPlacement] on the interface nor [ExtendedPrimaryKey]. if (isLongKey || isDefaultKey) { add( @" Public Shared Function GetGrain(primaryKey as System.Int64) As {0} Return Cast(Global.Orleans.CodeGeneration.GrainFactoryBase.MakeGrainReferenceInternal(GetType({0}), {1}, primaryKey)) End Function"); add( @" Public Shared Function GetGrain(primaryKey as System.Int64, grainClassNamePrefix As System.String) As {0} Return Cast(Global.Orleans.CodeGeneration.GrainFactoryBase.MakeGrainReferenceInternal(GetType({0}), {1}, primaryKey, grainClassNamePrefix)) End Function"); } if (isGuidKey || isDefaultKey) { add( @" Public Shared Function GetGrain(primaryKey As System.Guid) As {0} Return Cast(Global.Orleans.CodeGeneration.GrainFactoryBase.MakeGrainReferenceInternal(GetType({0}), {1}, primaryKey)) End Function"); add( @" Public Shared Function GetGrain(primaryKey As System.Guid, grainClassNamePrefix As System.String) As {0} Return Cast(Global.Orleans.CodeGeneration.GrainFactoryBase.MakeGrainReferenceInternal(GetType({0}), {1}, primaryKey, grainClassNamePrefix)) End Function"); } if (isStringKey) { add( @" Public Shared Function GetGrain(primaryKey As System.String) As {0} Return Cast(Global.Orleans.CodeGeneration.GrainFactoryBase.MakeGrainReferenceInternal(GetType({0}), {1}, primaryKey)) End Function"); add( @" Public Shared Function GetGrain(primaryKey As System.String, grainClassNamePrefix As System.String) As {0} Return Cast(Global.Orleans.CodeGeneration.GrainFactoryBase.MakeGrainReferenceInternal(GetType({0}), {1}, primaryKey, grainClassNamePrefix)) End Function"); } } }
protected override void AddGetGrainMethods(GrainInterfaceData iface, CodeTypeDeclaration factoryClass) { RecordReferencedNamespaceAndAssembly(typeof(GrainId)); RecordReferencedNamespaceAndAssembly(iface.Type); var interfaceId = GrainInterfaceData.GetGrainInterfaceId(iface.Type); Action <string> add = codeFmt => factoryClass.Members.Add( new CodeSnippetTypeMember(String.Format(codeFmt, iface.InterfaceTypeName, interfaceId))); bool hasKeyExt = GrainInterfaceData.UsesPrimaryKeyExtension(iface.Type); bool isGuidKey = typeof(IGrainWithGuidKey).IsAssignableFrom(iface.Type); bool isLongKey = typeof(IGrainWithIntegerKey).IsAssignableFrom(iface.Type); bool isStringKey = typeof(IGrainWithStringKey).IsAssignableFrom(iface.Type); bool isDefaultKey = !(isGuidKey || isStringKey || isLongKey); if (isDefaultKey && hasKeyExt) { // the programmer has specified [ExtendedPrimaryKey] on the interface. add(@" public static {0} GetGrain(long primaryKey, string keyExt) {{ return Cast(global::Orleans.CodeGeneration.GrainFactoryBase.MakeKeyExtendedGrainReferenceInternal(typeof({0}), {1}, primaryKey, keyExt)); }}"); add(@" public static {0} GetGrain(long primaryKey, string keyExt, string grainClassNamePrefix) {{ return Cast(global::Orleans.CodeGeneration.GrainFactoryBase.MakeKeyExtendedGrainReferenceInternal(typeof({0}), {1}, primaryKey, keyExt, grainClassNamePrefix)); }}"); add(@" public static {0} GetGrain(System.Guid primaryKey, string keyExt) {{ return Cast(global::Orleans.CodeGeneration.GrainFactoryBase.MakeKeyExtendedGrainReferenceInternal(typeof({0}), {1}, primaryKey, keyExt)); }}"); add(@" public static {0} GetGrain(System.Guid primaryKey, string keyExt, string grainClassNamePrefix) {{ return Cast(global::Orleans.CodeGeneration.GrainFactoryBase.MakeKeyExtendedGrainReferenceInternal(typeof({0}), {1}, primaryKey, keyExt,grainClassNamePrefix)); }}"); } else { // the programmer has not specified [ExplicitPlacement] on the interface nor [ExtendedPrimaryKey]. if (isLongKey || isDefaultKey) { add(@" public static {0} GetGrain(long primaryKey) {{ return Cast(global::Orleans.CodeGeneration.GrainFactoryBase.MakeGrainReferenceInternal(typeof({0}), {1}, primaryKey)); }}"); add(@" public static {0} GetGrain(long primaryKey, string grainClassNamePrefix) {{ return Cast(global::Orleans.CodeGeneration.GrainFactoryBase.MakeGrainReferenceInternal(typeof({0}), {1}, primaryKey, grainClassNamePrefix)); }}"); } if (isGuidKey || isDefaultKey) { add(@" public static {0} GetGrain(System.Guid primaryKey) {{ return Cast(global::Orleans.CodeGeneration.GrainFactoryBase.MakeGrainReferenceInternal(typeof({0}), {1}, primaryKey)); }}"); add(@" public static {0} GetGrain(System.Guid primaryKey, string grainClassNamePrefix) {{ return Cast(global::Orleans.CodeGeneration.GrainFactoryBase.MakeGrainReferenceInternal(typeof({0}), {1}, primaryKey, grainClassNamePrefix)); }}"); } if (isStringKey) { add(@" public static {0} GetGrain(System.String primaryKey) {{ return Cast(global::Orleans.CodeGeneration.GrainFactoryBase.MakeGrainReferenceInternal(typeof({0}), {1}, primaryKey)); }}"); add(@" public static {0} GetGrain(System.String primaryKey, string grainClassNamePrefix) {{ return Cast(global::Orleans.CodeGeneration.GrainFactoryBase.MakeGrainReferenceInternal(typeof({0}), {1}, primaryKey, grainClassNamePrefix)); }}"); } } }