public void Add(Domain domain)
 {
     lock(this)
     {
         base.BaseAdd(domain.Name, domain);
     }
 }
 public void TestBasic()
 {
     Domain domain = new Domain("default");
     AssertEquals( "default", domain.Name );
     AssertEquals( 0, domain.Count );
 }
        public ManagedInstance RegisterManagedObject(Object instance, ManagedObjectName name)
        {
            if (name == null)
            {
                throw new ArgumentNullException("name");
            }
            if (instance == null)
            {
                throw new ArgumentNullException("instance");
            }

            ComponentType cType = MInspector.Inspect(instance);
            MDynamicSupport dynamic = null;

            if (cType == ComponentType.None)
            {
                throw new InvalidComponentException("Component is not a managed component.");
            }

            if (cType == ComponentType.Standard)
            {
                dynamic = MDynamicSupportFactory.Create(instance);
            }
            else if (cType == ComponentType.Dynamic)
            {
                dynamic = (MDynamicSupport) instance;
            }

            String domainName = name.Domain;
            Domain domain = null;

            lock(domains)
            {
                domain = domains[domainName];

                if (domain == null)
                {
                    domain = new Domain(domainName);
                    domains.Add(domain);
                }
            }

            Entry entry = new Entry(instance, dynamic);

            try
            {
                MRegistrationListener registration = instance as MRegistrationListener;

                InvokeBeforeRegister(registration, name);

                lock(domain)
                {
                    if (domain.Contains(name))
                    {
                        throw new InstanceAlreadyRegistredException(name.ToString());
                    }

                    domain.Add(name, entry);
                }

                InvokeAfterRegister(registration);
            }
            catch(Exception e)
            {
                domain.Remove(name);

                throw e;
            }

            return new ManagedInstance(instance.GetType().FullName, name);
        }