📄 defaultservicecontainer.cs
字号:
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="Mike Krüger" email="mike@icsharpcode.net"/>
// <version value="$version"/>
// </file>
using System;
using System.Reflection;
using System.Collections;
using System.Collections.Specialized;
using System.Drawing;
using System.ComponentModel;
using System.ComponentModel.Design;
using System.Windows.Forms.Design;
namespace ICSharpCode.SharpDevelop.FormDesigner.Services
{
public class DefaultServiceContainer : IServiceContainer, IDisposable
{
IServiceContainer serviceContainer;
Hashtable services = new Hashtable();
bool inDispose = false;
public DefaultServiceContainer()
{
serviceContainer = new ServiceContainer();
}
public DefaultServiceContainer(IServiceContainer parent)
{
serviceContainer = new ServiceContainer(parent);
}
#region System.IDisposable interface implementation
public virtual void Dispose()
{
inDispose = true;
foreach (DictionaryEntry o in services) {
if (o.Value == this) {
continue;
}
// || o.GetType().Assembly != Assembly.GetCallingAssembly()
IDisposable disposeMe = o.Value as IDisposable;
if (disposeMe != null) {
try {
disposeMe.Dispose();
} catch (Exception e) {
Console.WriteLine("Exception while disposing " + disposeMe + ":" + e.ToString());
}
}
try {
serviceContainer.RemoveService((System.Type)o.Key, true);
}
catch
{
}
}
services.Clear();
services = null;
inDispose = false;
}
#endregion
#region System.ComponentModel.Design.IServiceContainer interface implementation
public void RemoveService(System.Type serviceType, bool promote)
{
if (inDispose == true)
return;
serviceContainer.RemoveService(serviceType, promote);
if (services.Contains(serviceType))
services.Remove(serviceType);
}
public void RemoveService(System.Type serviceType)
{
if (inDispose == true)
return;
serviceContainer.RemoveService(serviceType);
if (services.Contains(serviceType))
services.Remove(serviceType);
}
public void AddService(System.Type serviceType, System.ComponentModel.Design.ServiceCreatorCallback callback, bool promote)
{
if (IsServiceMissing(serviceType)) {
serviceContainer.AddService(serviceType, callback, promote);
}
}
public void AddService(System.Type serviceType, System.ComponentModel.Design.ServiceCreatorCallback callback)
{
if (IsServiceMissing(serviceType)) {
serviceContainer.AddService(serviceType, callback);
}
}
public void AddService(System.Type serviceType, object serviceInstance, bool promote)
{
if (IsServiceMissing(serviceType)) {
serviceContainer.AddService(serviceType, serviceInstance, promote);
services.Add(serviceType, serviceInstance);
}
}
public void AddService(System.Type serviceType, object serviceInstance)
{
if (IsServiceMissing(serviceType)) {
serviceContainer.AddService(serviceType, serviceInstance);
services.Add(serviceType, serviceInstance);
}
}
#endregion
#region System.IServiceProvider interface implementation
public object GetService(System.Type serviceType)
{
// Console.WriteLine("request service : {0} is aviable : {1}", serviceType, !IsServiceMissing(serviceType));
// if (IsServiceMissing(serviceType)) {
// Console.ReadLine();
// }
return serviceContainer.GetService(serviceType);
}
#endregion
bool IsServiceMissing(Type serviceType)
{
return serviceContainer.GetService(serviceType) == null;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -