0

私はCompositeApplicationBlockを学んでいて、サービスについて頭を悩ませてきました。私は自分のシェルアプリケーションを独自のソリューションに、そしてもちろん独自のソリューションにテストモジュールを持っています(シェルソリューションの外部で完全に独立してテストを開発およびテストしています)。「SQLサービス」という名前のサービスを作成した場合、シェルとモジュールの両方がタイプを認識できるように、これを独自のライブラリに配置する必要がありますか?

その場合、良い習慣として、サービスプロジェクトをシェルソリューションに配置する必要がありますか、それともモジュールとしてロードされていなくても、モジュールのように外部に配置する必要がありますか?

では、参照についてはどうでしょうか。シェルはこれを直接参照し、サービスを追加してから追加する必要がありますか?または、モジュールとしてロードしてサービスを追加しますか?

サービスはどこで作成すればよいですか?モジュールとして参照またはロードする必要がありますか?

4

2 に答える 2

1

2 つの異なるアセンブリに公開するサービスがある場合は、そのサービスのインターフェイスを別のアセンブリで定義し、それを 2 つのアセンブリで共有する必要があります。一般的に言えば、私は常にサービスを独自のアセンブリ (プロジェクト) に配置し、それらのサービスへのインターフェイス定義を別のアセンブリ (プロジェクト) に配置します。

CAB の特定のケースでは、シェル自体がサービスを使用する必要がある場合にのみ、シェルでそれを参照します。シェルは最低限必要です。モジュールが独自の要素をユーザーに表示できるようにするために存在します。個々のモジュールは、特定のサービスの参照と利用について心配することができます。

ソリューションの編成に関しては、通常、CAB アプリケーションに取り組んでいるときは、すべてが 1 つのソリューションに含まれています。個別のソリューションが必要になることはめったにありません。個別のプロジェクト、はい - ただし、すべてが 1 つの包括的なソリューションの下にあります。

于 2009-12-17T22:36:13.073 に答える
0

クリスの答えに加えて、シェルがサービスについて知るようになる唯一の方法は、サービスのシェルにサービス依存関係があり、サービスをルート作業項目に追加した場合です。

したがって、シェルには次のようなコードがあります

プライベート ISqlService sqlService;

[ServiceDependency Required=false] public ISqlService SqlService { get { return sqlService; } セット { sqlService = 値; } }

SqlService クラス (WorkItemController クラスから継承する必要があります) では、次のようなものがあります。

_rootWorkItem.Services.AddNew();

于 2010-08-26T02:23:41.137 に答える