public bool TryGetGrainType(Type grainClass, out GrainType grainType) { if (!LegacyGrainId.IsLegacyGrainType(grainClass)) { grainType = default; return(false); } Type canonicalGrainClass; if (grainClass.IsConstructedGenericType) { canonicalGrainClass = grainClass.GetGenericTypeDefinition(); } else { canonicalGrainClass = grainClass; } var isKeyExt = LegacyGrainId.IsLegacyKeyExtGrainType(canonicalGrainClass); var typeCode = GrainInterfaceUtils.GetGrainClassTypeCode(canonicalGrainClass); grainType = LegacyGrainId.GetGrainType(typeCode, isKeyExt); if (grainClass.IsGenericType) { grainType = GrainType.Create($"{grainType}`{canonicalGrainClass.GetGenericArguments().Length}"); } return(true); }
public bool TryGetGrainType(Type grainClass, out GrainType grainType) { if (LegacyGrainId.IsLegacyGrainType(grainClass)) { grainType = LegacyGrainId.GetGrainId(GrainInterfaceUtils.GetGrainClassTypeCode(grainClass), Guid.Empty).ToGrainId().Type; return(true); } grainType = default; return(false); }
/// <inheritdoc /> public IEnumerable <Dictionary <string, string> > GetBindings(IServiceProvider services, Type grainClass, GrainType grainType) { var binding = new Dictionary <string, string> { [WellKnownGrainTypeProperties.BindingTypeKey] = WellKnownGrainTypeProperties.StreamBindingTypeValue, [WellKnownGrainTypeProperties.StreamBindingPatternKey] = this.Predicate.PredicatePattern, [WellKnownGrainTypeProperties.StreamIdMapperKey] = this.StreamIdMapper, }; if (LegacyGrainId.IsLegacyGrainType(grainClass)) { string keyType; if (typeof(IGrainWithGuidKey).IsAssignableFrom(grainClass) || typeof(IGrainWithGuidCompoundKey).IsAssignableFrom(grainClass)) { keyType = nameof(Guid); } else if (typeof(IGrainWithIntegerKey).IsAssignableFrom(grainClass) || typeof(IGrainWithIntegerCompoundKey).IsAssignableFrom(grainClass)) { keyType = nameof(Int64); } else // fallback to string { keyType = nameof(String); } binding[WellKnownGrainTypeProperties.LegacyGrainKeyType] = keyType; } if (LegacyGrainId.IsLegacyKeyExtGrainType(grainClass)) { binding[WellKnownGrainTypeProperties.StreamBindingIncludeNamespaceKey] = "true"; } yield return(binding); }