class DefaultSite : ISite {
- private IComponent component;
- private Container container;
- private string name;
+ private readonly IComponent component;
+ private readonly Container container;
+ private string name;
public DefaultSite (string name, IComponent component, Container container)
{
return container.GetService (t);
}
}
-
- // <summary>
- // Container constructor
- // </summary>
- public Container ()
- {
- }
public virtual ComponentCollection Components {
get {
protected virtual object GetService (Type service)
{
- if (typeof(IContainer) != service) {
- return null;
- }
+ if (typeof(IContainer) != service)
+ return null;
return this;
}
public virtual void Remove (IComponent component)
{
- Remove (component, true);
+ Remove (component, true);
}
- private void Remove (IComponent component, bool unsite)
+ void Remove (IComponent component, bool unsite)
{
- if (component.Site != null && component.Site.Container == this) {
- if (unsite) {
- component.Site = null;
+ if (component != null) {
+ if (component.Site != null && component.Site.Container == this) {
+ if (unsite)
+ component.Site = null;
+ c.Remove (component);
}
- c.Remove (component);
- }
+ }
}
#if NET_2_0
protected void RemoveWithoutUnsiting (IComponent component)
{
- if (component.Site != null && component.Site.Container == this) {
- Remove (component, false);
- }
+ Remove (component, false);
}
#endif
-
}
}
}
#if NET_2_0
- public void Remove_WithoutUnsiting (IComponent component)
+ public new void RemoveWithoutUnsiting (IComponent component)
{
base.RemoveWithoutUnsiting (component);
}
_container.Remove (component);
Assert.IsNull (component.Site, "#3");
Assert.IsFalse (_container.Contains (component), "#4");
-
-#if NET_2_0
- _container.Add (component);
- _container.Remove_WithoutUnsiting (component);
- Assert.IsNotNull (component.Site, "#5");
- Assert.IsFalse (_container.Contains (component), "#6");
-#endif
}
[Test] // Dispose ()
Assert.IsNull (service, "#4");
}
+ [Test]
+ public void Remove ()
+ {
+ TestComponent compA;
+ TestComponent compB;
+ ISite siteA;
+ ISite siteB;
+
+ compA = new TestComponent ();
+ _container.Add (compA);
+ siteA = compA.Site;
+ compB = new TestComponent ();
+ _container.Add (compB);
+ siteB = compB.Site;
+ _container.Remove (compB);
+ Assert.AreSame (siteA, compA.Site, "#A1");
+ Assert.IsNull (compB.Site, "#A2");
+ Assert.AreEqual (1, _container.Components.Count, "#A3");
+ Assert.AreSame (compA, _container.Components [0], "#A4");
+
+ // remove component with no site
+ compB = new TestComponent ();
+ _container.Remove (compB);
+ Assert.AreSame (siteA, compA.Site, "#B1");
+ Assert.IsNull (compB.Site, "#B2");
+ Assert.AreEqual (1, _container.Components.Count, "#B3");
+ Assert.AreSame (compA, _container.Components [0], "#B4");
+
+ // remove component associated with other container
+ TestContainer container2 = new TestContainer ();
+ compB = new TestComponent ();
+ container2.Add (compB);
+ siteB = compB.Site;
+ _container.Remove (compB);
+ Assert.AreSame (siteA, compA.Site, "#C1");
+ Assert.AreSame (siteB, compB.Site, "#C2");
+ Assert.AreEqual (1, _container.Components.Count, "#C3");
+ Assert.AreSame (compA, _container.Components [0], "#C4");
+ Assert.AreEqual (1, container2.Components.Count, "#C5");
+ Assert.AreSame (compB, container2.Components [0], "#C6");
+ }
+
+ [Test]
+ public void Remove_Component_Null ()
+ {
+ _container.Add (new TestComponent ());
+ _container.Remove ((IComponent) null);
+ Assert.AreEqual (1, _container.Components.Count);
+ }
+
#if NET_2_0
+ [Test]
+ public void RemoveWithoutUnsiting ()
+ {
+ TestComponent compA;
+ TestComponent compB;
+ ISite siteA;
+ ISite siteB;
+
+ compA = new TestComponent ();
+ _container.Add (compA);
+ siteA = compA.Site;
+ compB = new TestComponent ();
+ _container.Add (compB);
+ siteB = compB.Site;
+ _container.RemoveWithoutUnsiting (compB);
+ Assert.AreSame (siteA, compA.Site, "#A1");
+ Assert.AreSame (siteB, compB.Site, "#A2");
+ Assert.AreEqual (1, _container.Components.Count, "#A3");
+ Assert.AreSame (compA, _container.Components [0], "#A4");
+
+ // remove component with no site
+ compB = new TestComponent ();
+ _container.RemoveWithoutUnsiting (compB);
+ Assert.AreSame (siteA, compA.Site, "#B1");
+ Assert.IsNull (compB.Site, "#B2");
+ Assert.AreEqual (1, _container.Components.Count, "#B3");
+ Assert.AreSame (compA, _container.Components [0], "#B4");
+
+ // remove component associated with other container
+ TestContainer container2 = new TestContainer ();
+ compB = new TestComponent ();
+ container2.Add (compB);
+ siteB = compB.Site;
+ _container.RemoveWithoutUnsiting (compB);
+ Assert.AreSame (siteA, compA.Site, "#C1");
+ Assert.AreSame (siteB, compB.Site, "#C2");
+ Assert.AreEqual (1, _container.Components.Count, "#C3");
+ Assert.AreSame (compA, _container.Components [0], "#C4");
+ Assert.AreEqual (1, container2.Components.Count, "#C5");
+ Assert.AreSame (compB, container2.Components [0], "#C6");
+ }
+
+ [Test]
+ public void RemoveWithoutUnsiting_Component_Null ()
+ {
+ ISite site;
+ TestComponent component;
+
+ component = new TestComponent ();
+ _container.Add (component);
+ site = component.Site;
+ _container.RemoveWithoutUnsiting ((IComponent) null);
+ Assert.AreSame (site, component.Site, "#1");
+ Assert.AreEqual (1, _container.Components.Count, "#2");
+ Assert.AreSame (component, _container.Components [0], "#3");
+ }
+
[Test]
public void ValidateName_Component_Null ()
{