예제 #1
0
 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);
        }