public GrainTypeData(Type type, MultiClusterRegistrationStrategyManager registrationManager) { var typeInfo = type.GetTypeInfo(); Type = type; IsReentrant = typeInfo.GetCustomAttributes(typeof(ReentrantAttribute), true).Any(); // TODO: shouldn't this use GrainInterfaceUtils.IsStatelessWorker? IsStatelessWorker = typeInfo.GetCustomAttributes(typeof(StatelessWorkerAttribute), true).Any(); GrainClass = TypeUtils.GetFullName(typeInfo); RemoteInterfaceTypes = GetRemoteInterfaces(type); MayInterleave = GetMayInterleavePredicate(typeInfo) ?? (_ => false); MultiClusterRegistrationStrategy = registrationManager?.GetMultiClusterRegistrationStrategy(type); }