开源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或
  1. 找到一个开源插件/提供程序库,将实现我的目标

当前代码示例

    /// <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; }
    }

开源c#插件提供商Harnes(控制台应用程序或Windows服务)

如果你设置正确,微软的MAF框架将允许你卸载应用程序域。事实上,最常见的情况是将每个加载项加载到单独的应用程序域中。

实际上,您可以选择外接程序的隔离级别来控制这一点。

见http://msdn.microsoft.com/en-us/library/bb384200%28v=vs.100%29.aspx