我的目标
我正在寻找一个好的 C# Provider 模型库,它会自动重新加载更新的 Provider DLL 并继续运行。
我当前(旧)的解决方案
我有一个旧的 SnapIn/Plugin 组件工具,用于为 Web 应用程序或 Windows 服务提供插件功能。过去,我使用它每 10 分钟读/写一次 HTTP 请求,或者监视文件更改并加载数据文件。
我只是有一个带有生命周期方法的 IPlugIn,例如 Initialize、Start、Stop
我还有一些基本实现,例如 Interval(每 N 秒触发一次)或 File Watcher 在文件更改时会做一些事情。
我想用我当前的系统实现的目标(我的目标)
我希望能够:
- 更改代码
- 重新编译
- 将 DLL 复制到 Windows Serviced 文件夹
- 最后让 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; }
}