0

私の目標

更新されたプロバイダー DLL を自動的に再読み込みし、実行を継続する優れた C# プロバイダー モデル ライブラリを探しています。

私の現在の(古い)ソリューション

Web アプリまたは Windows サービスにプラグイン機能を提供するために使用する古い SnapIn/Plugin コンポーネント ハーネスがあります。過去に、10 分ごとに HTTP 要求を読み書きするために使用したり、ファイルの変更を監視してデータ ファイルをロードしたりしました。

Initialize、Start、Stop などのライフサイクル メソッドを備えた IPlugIn を持っているだけです。

Interval (Fire ever N seconds) や 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 に答える