You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
108 lines
3.2 KiB
C#
108 lines
3.2 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.IO;
|
|
using System.Reflection;
|
|
|
|
namespace Mesnac.Equips
|
|
{
|
|
public interface DataChanged
|
|
{
|
|
void DoSave(object sender, Mesnac.Equips.ReadEventArgs e);
|
|
}
|
|
public abstract class DataChanging
|
|
{
|
|
public DataChanging(DataChanged _changed)
|
|
{
|
|
this.DataChanged = _changed;
|
|
}
|
|
public abstract void DoRead(object sender, Mesnac.Equips.ReadEventArgs e);
|
|
protected DataChanged DataChanged { get; set; }
|
|
protected string DataChangingKey { get; set; }
|
|
}
|
|
|
|
public class DataChange
|
|
{
|
|
public DataChange()
|
|
{
|
|
Dictionary<string, DataChanging> dicDataChanging = ReadDataChangingXml();
|
|
equipOnRead(dicDataChanging);
|
|
}
|
|
#region 数据验证层
|
|
//绑定变化
|
|
private void equipOnRead(DataChanging changing)
|
|
{
|
|
foreach (BaseEquip equip in Mesnac.Equips.Factory.Instance.AllEquips.Values)
|
|
{
|
|
equip.EquipReadData += changing.DoRead;
|
|
}
|
|
}
|
|
private void equipOnRead(Dictionary<string, DataChanging> dicDataChanging)
|
|
{
|
|
foreach (DataChanging changing in dicDataChanging.Values)
|
|
{
|
|
equipOnRead(changing);
|
|
}
|
|
}
|
|
//解析配置文件
|
|
private Dictionary<string, DataChanging> ReadDataChangingXml()
|
|
{
|
|
Dictionary<string, DataChanging> dicDataChanging = new Dictionary<string, DataChanging>();
|
|
return dicDataChanging;
|
|
}
|
|
private DataChanging getDataChanging(string fileName, string className, string key)
|
|
{
|
|
DataChanged changed = getDataChanged(key);
|
|
if (changed == null)
|
|
{
|
|
return null;
|
|
}
|
|
if (!File.Exists(fileName))
|
|
{
|
|
return null;
|
|
}
|
|
Assembly ass = Assembly.LoadFile(fileName);
|
|
if (ass == null)
|
|
{
|
|
return null;
|
|
}
|
|
Type type = ass.GetType(className);
|
|
if (type == null)
|
|
{
|
|
return null;
|
|
}
|
|
DataChanging changing = (DataChanging)Activator.CreateInstance(type, changed);
|
|
return changing;
|
|
}
|
|
#endregion
|
|
#region 数据保存层
|
|
private DataChanged getDataChanging(string fileName, string className)
|
|
{
|
|
if (!File.Exists(fileName))
|
|
{
|
|
return null;
|
|
}
|
|
Assembly ass = Assembly.LoadFile(fileName);
|
|
if (ass == null)
|
|
{
|
|
return null;
|
|
}
|
|
Type type = ass.GetType(className);
|
|
if (type == null)
|
|
{
|
|
return null;
|
|
}
|
|
DataChanged changed = (DataChanged)Activator.CreateInstance(type);
|
|
return changed;
|
|
}
|
|
private DataChanged getDataChanged(string key)
|
|
{
|
|
string fileName = string.Empty;
|
|
string className = string.Empty;
|
|
return getDataChanging(fileName, className);
|
|
}
|
|
#endregion
|
|
}
|
|
}
|