2011-03-04 26 views
4

私は何百ものコンピュータにインストールされる私の組織のためのサービスを作成しています。その実装は時間の経過とともに変更する必要があるかもしれません。見て、MEFについて少し読んだ後、私はまだ少し失われています。もし私がdllをサービスフォルダにドロップして、そのサービスが変更を受け取るようにしたいのであれば、MEFは良い考えですか?管理された拡張性フレームワーク

+0

あなたは、 "変更を拾う" ことで、正確に何を意味するのですか?モジュールを再コンパイルせずにアプリケーションに追加したいのですか?または、アプリケーションを再起動せずに変更しますか?または、他の何か? –

+0

コンパイルせずにアプリケーションを変更したい場合は、サービスを削除して、サービスを再インストールしてください。 100以上のインストールでこれは必須です。 – Jesse

答えて

3

私はMEFでかなりのことをしました。はい、MEFは警告で、あなたが探しているものでしょう...

  • あなたランタイム
  • で発見し、新しいDLLで負荷することができますしかし、それは同じアプリケーションドメインにロードしますメインアプリケーションので、
  • あなたはないアンロードまたはアプリケーションその最後の点が問題となる場合は

を再起動せずにDLLを変更するには、MAFを考慮することができる(それははるかに重いのですが)。しかし、MAFでは、拡張機能を別のアプリドメインにロードします。

他のオプションは、要求を処理する別のプロセスを生成し、それにコマンドラインパラメータを渡すことです。

+0

ありがとうございます。再起動は問題ではありません。 – Jesse

0

私はあなたがサービスロジックを別のクラスライブラリに持っていて、別のクラスライブラリに必要な契約インタフェースを持っているなら、これを行うことができると思います。その後、ディレクトリカタログを作成し、MEFを使用してサービス実装をインポートすることができます(契約インタフェースアセンブリのみを参照する必要があります)。変更された場合は、新しいDLL /サービスの実装を取得することができます。ディレクトリウォッチャー(FileSystemWatcher)が必要な場合は、ディレクトリウォッチャーが起動するときにカタログの更新メソッドを呼び出す必要があります。理論的にはうまくいくはずですが、単なるアイデアです。 :)とにかく、これが助けて欲しい。

0

私はMEFについて熟練していません。ドキュメンテーションによると、Mefはプラグインベースのシステムを作ることです。あなたのシステムはいくつかのインターフェースを期待しており、MEFはこれらのインターフェースをシステムに実装するためのクラスをインポートしやすくします。あなたのケースはこれに適しています。 MEFにはディレクトリカタログがあり、カタログを使用することにより、タイプ/ dllランタイムをインポートできます。

How do I get a MEF Directory catalog looking at the same directory for both the Servicelayer and DAL?

0

またPrismに見ることができます。私が理解していることから、彼らはほとんど同じことをするための2つの異なるフレームワークです。 Prismでは、IModuleインターフェイスを実装するdllクラスを持つことによって、モジュールを作成できます。 MEFのように、dllをフォルダにドラッグアンドドロップするだけです。静的または動的にモジュールをロードしたり、私が知らない他の多くのことを行うことができます。

プリズムには、Unity Dependency Injection Container(私は「The Magical Black Box」と呼ぶのが好きです)、きちんとしたイベントやコマンド体系などもあります。MEFには物事も。

1

VS2010を使用している場合は、まず1回クリックしてみることをおすすめします。 setup.exeが提供されますが、HTMLファイル(およびその他のファイル)、IISサーバーまたはFTPサイト、またはローカルネットワーク上の共有フォルダにアップロードすることもできます。つまり、デプロイメントを構成するときには、サイトから直接すべてのクライアントを自動的に更新するようにインストーラに指示できます(HTMLファイル、ftpまたはlan共有フォルダ)。ユーザーがアプリケーションを起動すると、サイトに接続し、存在する場合は更新を要求し、存在する場合は、アプリケーションが自己更新します。更新プログラムを展開する場合は、HTMLファイルとそのフォルダ内の他のすべてのファイルだけを再度アップロードする必要があります。

このリンクをチェックアウト:

http://msdn.microsoft.com/en-us/library/ms953320.aspx

http://weblogs.asp.net/shahar/archive/2008/01/29/how-to-use-clickonce-to-deploy-your-applications.aspx

コーディングハッピー;)

関連する問題