Пример #1
0
        internal void Register(Assembly[] assemblies, Func <Assembly, IEnumerable <Type> > selector)
        {
            Requires.NotNull(assemblies, nameof(assemblies));

            if (assemblies.Length == 0)
            {
                throw new ArgumentException("Assemblies length should be greater than 0", nameof(assemblies));
            }

            foreach (var assembly in assemblies)
            {
                if (this.assemblies.Contains(assembly))
                {
                    throw new ArgumentException($"Assembly {assembly.FullName} has been already registered");
                }

                this.assemblies.Add(assembly);
            }

            foreach (var type in assemblies.SelectMany(selector))
            {
                var mapping = ActorInterfaceMapping.Of(type, assemblies);

                if (interfaces.Contains(mapping.TypeName))
                {
                    var existing = mappings.Single(x => x.TypeName == mapping.TypeName);
                    throw new DuplicateActorTypeException(existing, mapping);
                }

                interfaces.Add(mapping.TypeName);
                mappings.Add(mapping);
            }
        }
Пример #2
0
        internal ActorInterface(ActorInterfaceMapping mapping, Type grain)
        {
            Mapping = mapping;
            Grain   = grain;

            TypeCode = grain.TypeCode();
            Version  = grain.InterfaceVersion();
            Name     = Mapping.TypeName;

            Array.ForEach(mapping.Types, ActorTypeName.Register);
        }
Пример #3
0
        ActorInterfaceDeclaration(ActorInterfaceMapping mapping)
        {
            this.mapping = mapping;
            CheckValidIdentifier(mapping.TypeName);

            var path = mapping.TypeName.Split(separator, StringSplitOptions.RemoveEmptyEntries);

            name = path.Last();

            namespaces = path.TakeWhile(x => x != name).ToList();
            namespaces.Insert(0, "Fun");

            name     = "I" + name;
            fullPath = string.Join(".", new List <string>(namespaces)
            {
                name
            });
        }
Пример #4
0
 internal ActorInterface(ActorInterfaceMapping mapping, Type grain)
 {
     name = mapping.Name;
     Array.ForEach(mapping.Types, ActorTypeName.Register);
     this.grain = grain;
 }