初始化版本
This commit is contained in:
81
tongxin/NetWorkHelper/Addins/AddinUtil.cs
Normal file
81
tongxin/NetWorkHelper/Addins/AddinUtil.cs
Normal file
@@ -0,0 +1,81 @@
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace NetWorkHelper.Addins
|
||||
{
|
||||
/// <summary>
|
||||
/// 用于宿主应用程序向插件传递必要的参数信息
|
||||
/// </summary>
|
||||
public static class AddinUtil
|
||||
{
|
||||
private static IDictionary<string, object> DicUtil = new Dictionary<string, object>();
|
||||
|
||||
#region RegisterObject
|
||||
/// <summary>
|
||||
/// RegisterObject
|
||||
/// </summary>
|
||||
/// <param name="name"></param>
|
||||
/// <param name="obj"></param>
|
||||
public static void RegisterObject(string name, object obj)
|
||||
{
|
||||
lock (AddinUtil.DicUtil)
|
||||
{
|
||||
if (AddinUtil.DicUtil.ContainsKey(name))
|
||||
{
|
||||
AddinUtil.Remove(name);
|
||||
}
|
||||
|
||||
AddinUtil.DicUtil.Add(name, obj);
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region GetObject
|
||||
/// <summary>
|
||||
/// GetObject
|
||||
/// </summary>
|
||||
/// <param name="name"></param>
|
||||
/// <returns></returns>
|
||||
public static object GetObject(string name)
|
||||
{
|
||||
lock (AddinUtil.DicUtil)
|
||||
{
|
||||
if (AddinUtil.DicUtil.ContainsKey(name))
|
||||
{
|
||||
return AddinUtil.DicUtil[name];
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region Remove
|
||||
/// <summary>
|
||||
/// Remove
|
||||
/// </summary>
|
||||
/// <param name="name"></param>
|
||||
public static void Remove(string name)
|
||||
{
|
||||
lock (AddinUtil.DicUtil)
|
||||
{
|
||||
if (AddinUtil.DicUtil.ContainsKey(name))
|
||||
{
|
||||
AddinUtil.DicUtil.Remove(name);
|
||||
}
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region Clear
|
||||
/// <summary>
|
||||
/// Clear
|
||||
/// </summary>
|
||||
public static void Clear()
|
||||
{
|
||||
lock (AddinUtil.DicUtil)
|
||||
{
|
||||
AddinUtil.DicUtil.Clear();
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
49
tongxin/NetWorkHelper/Addins/IAddin.cs
Normal file
49
tongxin/NetWorkHelper/Addins/IAddin.cs
Normal file
@@ -0,0 +1,49 @@
|
||||
|
||||
namespace NetWorkHelper.Addins
|
||||
{
|
||||
/// <summary>
|
||||
/// 所有插件基本接口
|
||||
/// </summary>
|
||||
public interface IAddin
|
||||
{
|
||||
/// <summary>
|
||||
/// OnLoading 生命周期回调,当插件加载完毕被调用。可以从AddinUtil获取主应用传递的参数来初始化插件
|
||||
/// </summary>
|
||||
void OnLoading();
|
||||
|
||||
/// <summary>
|
||||
/// BeforeTerminating 生命周期回调,卸载插件前调用
|
||||
/// </summary>
|
||||
void BeforeTerminating();
|
||||
|
||||
/// <summary>
|
||||
/// Enabled 插件是否启用
|
||||
/// </summary>
|
||||
bool Enabled { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// AddinKey 插件关键字,不同的插件其Key是不一样的
|
||||
/// </summary>
|
||||
int AddinKey { get; }
|
||||
|
||||
/// <summary>
|
||||
/// ServiceName 插件提供的服务的名字
|
||||
/// </summary>
|
||||
string AddinName { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Description 插件的描述信息
|
||||
/// </summary>
|
||||
string Description { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Version 插件版本
|
||||
/// </summary>
|
||||
float Version { get; }
|
||||
}
|
||||
|
||||
public class AddinHelper
|
||||
{
|
||||
public const string AddinSign = "BinGoo.dll"; //所有的插件都以"BinGoo.dll"结尾
|
||||
}
|
||||
}
|
||||
67
tongxin/NetWorkHelper/Addins/IAddinManager.cs
Normal file
67
tongxin/NetWorkHelper/Addins/IAddinManager.cs
Normal file
@@ -0,0 +1,67 @@
|
||||
using NetWorkHelper.ICommond;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace NetWorkHelper.Addins
|
||||
{
|
||||
/// <summary>
|
||||
/// 用于加载/卸载,管理各种插件接口。
|
||||
/// </summary>
|
||||
public interface IAddinManager
|
||||
{
|
||||
#region Property
|
||||
/// <summary>
|
||||
/// CopyToMemory 是否将插件拷贝到内存后加载
|
||||
/// </summary>
|
||||
bool CopyToMemory { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// AddinList 已加载的插件列表
|
||||
/// </summary>
|
||||
IList<IAddin> AddinList { get; } //集合中为IAddin
|
||||
|
||||
#endregion
|
||||
|
||||
#region Method
|
||||
/// <summary>
|
||||
/// LoadDefault 加载当前目录或子目录下的所有有效插件
|
||||
/// </summary>
|
||||
void LoadDefault();
|
||||
|
||||
/// <summary>
|
||||
/// LoadAllAddins 加载指定目录下的所有插件
|
||||
/// </summary>
|
||||
void LoadAllAddins(string addinFolderPath, bool searchChildFolder);
|
||||
|
||||
/// <summary>
|
||||
/// LoadAddinAssembly 加载指定的插件
|
||||
/// </summary>
|
||||
void LoadAddinAssembly(string assemblyPath);
|
||||
|
||||
/// <summary>
|
||||
/// Clear 清空所有已经加载的插件
|
||||
/// </summary>
|
||||
void Clear();
|
||||
|
||||
/// <summary>
|
||||
/// DynRemoveAddin 动态移除指定的插件
|
||||
/// </summary>
|
||||
void DynRemoveAddin(int addinKey);
|
||||
|
||||
/// <summary>
|
||||
/// EnableAddin 启用指定的插件
|
||||
/// </summary>
|
||||
void EnableAddin(int addinKey);
|
||||
|
||||
/// <summary>
|
||||
/// EnableAddin 禁用指定的插件
|
||||
/// </summary>
|
||||
void DisableAddin(int addinKey);
|
||||
|
||||
IAddin GetAddin(int addinKey);
|
||||
#endregion
|
||||
|
||||
#region Event
|
||||
event NetWorkEventHandler AddinsChanged;
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
168
tongxin/NetWorkHelper/Addins/NetAddinManagement.cs
Normal file
168
tongxin/NetWorkHelper/Addins/NetAddinManagement.cs
Normal file
@@ -0,0 +1,168 @@
|
||||
using NetWorkHelper.Helper;
|
||||
using NetWorkHelper.ICollections;
|
||||
using NetWorkHelper.ICommond;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Reflection;
|
||||
|
||||
namespace NetWorkHelper.Addins
|
||||
{
|
||||
/// <summary>
|
||||
/// 插件管理类
|
||||
/// </summary>
|
||||
public class NetAddinManagement : IAddinManager
|
||||
{
|
||||
private IDictionary<int, IAddin> dicAddins = new Dictionary<int, IAddin>();
|
||||
public event NetWorkEventHandler AddinsChanged;
|
||||
|
||||
public NetAddinManagement()
|
||||
{
|
||||
this.AddinsChanged += delegate { };
|
||||
}
|
||||
|
||||
#region IAddinManagement 成员
|
||||
#region LoadAllAddins
|
||||
public void LoadAllAddins(string addin_FolderPath, bool searchChildFolder)
|
||||
{
|
||||
ReflectionHelper.TypeLoadConfig config = new ReflectionHelper.TypeLoadConfig(this.copyToMem, false, AddinHelper.AddinSign);
|
||||
IList<Type> addinTypeList = ReflectionHelper.LoadDerivedType(typeof(IAddin), addin_FolderPath, searchChildFolder, config);
|
||||
foreach (Type addinType in addinTypeList)
|
||||
{
|
||||
IAddin addin = (IAddin)Activator.CreateInstance(addinType);
|
||||
this.dicAddins.Add(addin.AddinKey, addin);
|
||||
addin.OnLoading();
|
||||
}
|
||||
|
||||
this.AddinsChanged();
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region LoadDefault
|
||||
public void LoadDefault()
|
||||
{
|
||||
this.LoadAllAddins(AppDomain.CurrentDomain.BaseDirectory, true);
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region LoadAddinAssembly
|
||||
public void LoadAddinAssembly(string assemblyPath)
|
||||
{
|
||||
Assembly asm = null;
|
||||
if (this.copyToMem)
|
||||
{
|
||||
byte[] addinStream = FileHelper.ReadFileReturnBytes(assemblyPath);
|
||||
asm = Assembly.Load(addinStream);
|
||||
}
|
||||
else
|
||||
{
|
||||
asm = Assembly.LoadFrom(assemblyPath);
|
||||
}
|
||||
|
||||
|
||||
IList<IAddin> newList = ReflectionHelper.LoadDerivedInstance<IAddin>(asm);
|
||||
foreach (IAddin newAddin in newList)
|
||||
{
|
||||
this.dicAddins.Add(newAddin.AddinKey, newAddin);
|
||||
newAddin.OnLoading();
|
||||
}
|
||||
|
||||
this.AddinsChanged();
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region Clear ,DynRemoveAddin
|
||||
public void Clear()
|
||||
{
|
||||
foreach (IAddin addin in this.dicAddins.Values)
|
||||
{
|
||||
try
|
||||
{
|
||||
addin.BeforeTerminating();
|
||||
}
|
||||
catch { }
|
||||
}
|
||||
|
||||
this.dicAddins.Clear();
|
||||
this.AddinsChanged();
|
||||
}
|
||||
|
||||
public void DynRemoveAddin(int addinKey)
|
||||
{
|
||||
IAddin dest = this.GetAddin(addinKey);
|
||||
|
||||
if (dest != null)
|
||||
{
|
||||
dest.BeforeTerminating();
|
||||
this.dicAddins.Remove(addinKey);
|
||||
this.AddinsChanged();
|
||||
}
|
||||
}
|
||||
|
||||
private bool ContainsAddin(int addinKey)
|
||||
{
|
||||
return this.dicAddins.ContainsKey(addinKey);
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region AddinList
|
||||
public IList<IAddin> AddinList
|
||||
{
|
||||
get
|
||||
{
|
||||
return CollectionConverter.CopyAllToList<IAddin>(this.dicAddins.Values);
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region GetAddin
|
||||
public IAddin GetAddin(int addinKey)
|
||||
{
|
||||
if (!this.dicAddins.ContainsKey(addinKey))
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
return this.dicAddins[addinKey];
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region event ,property
|
||||
private bool copyToMem = false;
|
||||
public bool CopyToMemory
|
||||
{
|
||||
get
|
||||
{
|
||||
return this.copyToMem;
|
||||
}
|
||||
set
|
||||
{
|
||||
this.copyToMem = value;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
#endregion
|
||||
|
||||
#region EnableAddin ,DisableAddin
|
||||
public void EnableAddin(int addinKey)
|
||||
{
|
||||
IAddin dest = this.GetAddin(addinKey);
|
||||
if (dest != null)
|
||||
{
|
||||
dest.Enabled = true;
|
||||
}
|
||||
}
|
||||
|
||||
public void DisableAddin(int addinKey)
|
||||
{
|
||||
IAddin dest = this.GetAddin(addinKey);
|
||||
if (dest != null)
|
||||
{
|
||||
dest.Enabled = false;
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user