public override object Clone()
        {
            var clone = (IItemInstance)base.Clone();

            ServerItemRegistry.Register(clone.ID, clone);
            return(clone);
        }
Beispiel #2
0
        public IItemInstance CreateInstance <TDefinition>(TDefinition itemDefinition, System.Guid guid)
            where TDefinition : IItemDefinition
        {
            ConstructorInfo info;

            if (_instanceLookupDictionary.TryGetValue(itemDefinition.GetType(), out info))
            {
                var inst = (IItemInstance)info.Invoke(new object[] { guid, itemDefinition });
                ItemRegistry.Register(inst.ID, inst);

                // On hosts (server+client) a client shouldn't overwrite the instance in the server registry.
                if (ServerItemRegistry.Contains(inst.ID) == false)
                {
                    ServerItemRegistry.Register(inst.ID, inst);
                }

                return(inst);
            }

            throw new ArgumentException("No instance type found for definition " + itemDefinition.GetType());
        }