using System; using System.Reflection; using sharp.tradebot; namespace TradeBot { public class BotSpecification : MarshalByRefObject { public string DllPath { get; private set; } public string ClassName { get; private set; } public object[] Arguments { get; private set; } public string BotSpec { get { return string.Format("{0}:{1}",ClassName,DllPath); } } public bool IsLoaded { get { return currentInstance != null; } } public TradingBot CurrentInstance { get { return this.currentInstance; } } AppDomain Domain; Assembly Assembly; Type ClassType; TradingBot currentInstance; public BotSpecification(string dllpath,string className,object[] arguments) { DllPath = dllpath; ClassName = className; } public void Unload(){ currentInstance = null; ClassType = null; Assembly = null; AppDomain.Unload(Domain); Domain = null; } public void Load(){ if (Domain != null){ Unload(); } Domain = AppDomain.CreateDomain(DllPath); Assembly = Domain.Load(DllPath); ClassType = Assembly.GetType(ClassName); } TradingBot TradingBot { get { if (currentInstance == null){ currentInstance = (TradingBot)Activator.CreateInstance(ClassType); } return currentInstance; } } } }