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

时间:2013-01-08 10:17:31

标签: c# plugins open-source

我的目标

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

我的当前(旧)解决方案

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

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

我还有基本实现,例如Interval(Fire ever N秒)或File Watcher在文件更改时执行某些操作。

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

我希望能够:

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

选项

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

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

1 个答案:

答案 0 :(得分:1)

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

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

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