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); } }
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); }
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 }); }
internal ActorInterface(ActorInterfaceMapping mapping, Type grain) { name = mapping.Name; Array.ForEach(mapping.Types, ActorTypeName.Register); this.grain = grain; }