开源c#插件提供商Harnes(控制台应用程序或Windows服务)
本文关键字:应用程序 Windows 服务 控制台 插件 提供商 Harnes 开源 | 更新日期: 2023-09-27 17:50:55
My Goal
我正在寻找一个好的c#提供程序模型库,自动重新加载更新的提供程序DLL并保持运行。
我的当前(旧)解决方案
我有一个旧的SnapIn/Plugin组件束,我用它来为web应用程序或windows服务提供插件功能。在过去,我用它每10分钟读/写一次HTTP请求,或者观察文件的变化和加载数据文件。
我只是有一个IPlugIn的生命周期方法,如Initialize, Start,Stop
我也有基本的实现,如间隔(每N秒触发一次)或文件监视器做一些当文件改变。
我想用我当前的系统实现的目标(我的目标)
我想要能够:
- <
- 改变代码/gh>
- 编译
- 将DLL复制到Windows服务文件夹 最后让DLL自动加载,初始化并执行
- 写一些代码来自动卸载旧的DLL并加载新的DLL或
- 找到一个开源插件/提供程序库,将实现我的目标
当前代码示例
/// <summary>
/// All SnapIn/Provider implement this interface
/// </summary>
public interface ISnapIn
{
/// <summary>
/// Configuration information for the SnapIn.
/// </summary>
/// <param name="config">The config.</param>
void SetConfig(SnapInConfigurationSnapInDo config);
/// <summary>
/// Unique SnapIn ID
/// </summary>
string Id { get; set; }
/// <summary>
/// Description SnapIn.
/// </summary>
string Description { get; set; }
/// <summary>
/// Life-Cycle State
/// </summary>
SnapInStateType State { get; set; }
/// <summary>
/// Initializes the snapin.
/// </summary>
void Initialize(SnapInManager manager, NameValueDictionary parameters);
/// <summary>
/// Starts this snapin
/// </summary>
void Start();
/// <summary>
/// Stops this snpin.
/// </summary>
void Stop();
}
.
public abstract class FileWatchSnapIn : BaseSnapIn
{
// *********************************************************************************
// Properties
// *********************************************************************************
public string Path { get; set; }
public string Filter { get; set; }
protected FileSystemWatcher Watcher { get; set; }
// ...
}
.
public abstract class IntervalSnapIn : BaseSnapIn
{
// *********************************************************************************
// Properties
// *********************************************************************************
protected Timer Timer { get; set; }
protected long Interval { get; set; }
protected bool FireIntervalTaskOnStart { get; set; }
}
如果你设置正确,微软的MAF框架将允许你卸载应用程序域。事实上,最常见的情况是将每个加载项加载到单独的应用程序域中。
实际上,您可以选择外接程序的隔离级别来控制这一点。
见http://msdn.microsoft.com/en-us/library/bb384200%28v=vs.100%29.aspx