0

我的目标

我正在寻找一个好的 C# Provider 模型库,它会自动重新加载更新的 Provider DLL 并继续运行。

我当前(旧)的解决方案

我有一个旧的 SnapIn/Plugin 组件工具,用于为 Web 应用程序或 Windows 服务提供插件功能。过去,我使用它每 10 分钟读/写一次 HTTP 请求,或者监视文件更改并加载数据文件。

我只是有一个带有生命周期方法的 IPlugIn,例如 Initialize、Start、Stop

我还有一些基本实现,例如 Interval(每 N 秒触发一次)或 File Watcher 在文件更改时会做一些事情。

我想用我当前的系统实现的目标(我的目标)

我希望能够:

  • 更改代码
  • 重新编译
  • 将 DLL 复制到 Windows Serviced 文件夹
  • 最后让 DLL 自动加载、初始化和执行

选项

  1. 编写某种代码来自动卸载旧 DLL 并加载新 DLL 或
  2. 找到一个可以实现我的目标的开源插件/提供程序库

当前代码示例

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

1 回答 1

1

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

本质上,您可以选择加载项的隔离级别来控制它。

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

于 2013-01-08T11:05:27.223 回答