私の目標
更新されたプロバイダー DLL を自動的に再読み込みし、実行を継続する優れた C# プロバイダー モデル ライブラリを探しています。
私の現在の(古い)ソリューション
Web アプリまたは Windows サービスにプラグイン機能を提供するために使用する古い SnapIn/Plugin コンポーネント ハーネスがあります。過去に、10 分ごとに HTTP 要求を読み書きするために使用したり、ファイルの変更を監視してデータ ファイルをロードしたりしました。
Initialize、Start、Stop などのライフサイクル メソッドを備えた IPlugIn を持っているだけです。
Interval (Fire ever N seconds) や 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; }
}