using NetWorkHelper.Helper;
using NetWorkHelper.ICollections;
using NetWorkHelper.ICommond;
using System;
using System.Collections.Generic;
using System.Reflection;
namespace NetWorkHelper.Addins
{
///
/// 插件管理类
///
public class NetAddinManagement : IAddinManager
{
private IDictionary dicAddins = new Dictionary();
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 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 newList = ReflectionHelper.LoadDerivedInstance(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 AddinList
{
get
{
return CollectionConverter.CopyAllToList(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
}
}