public void Configure(GrainType grainType, GrainProperties properties, GrainTypeSharedContext shared) { if (_grainClassMap.TryGetGrainClass(grainType, out var grainClass) && grainClass.IsAssignableFrom(typeof(ExplicitlyRegisteredSimpleDIGrain))) { shared.SetComponent <IGrainActivator>(this); } }
public void Configure(GrainType grainType, GrainProperties properties, GrainTypeSharedContext shared) { if (properties.Properties.TryGetValue(WellKnownGrainTypeProperties.Reentrant, out var value) && bool.Parse(value)) { var component = shared.GetComponent <GrainCanInterleave>(); if (component is null) { component = new GrainCanInterleave(); shared.SetComponent <GrainCanInterleave>(component); } component.MayInterleavePredicates.Add(_ => true); } }
public void Configure(GrainType grainType, GrainProperties properties, GrainTypeSharedContext shared) { if (shared.GetComponent <IGrainActivator>() is object) { return; } if (!_grainClassMap.TryGetGrainClass(grainType, out var grainClass)) { return; } var argumentFactory = _constructorArgumentFactory.CreateFactory(grainClass); var createGrainInstance = ActivatorUtilities.CreateFactory(grainClass, argumentFactory.ArgumentTypes); var instanceActivator = new DefaultGrainActivator(createGrainInstance, argumentFactory); shared.SetComponent <IGrainActivator>(instanceActivator); }