ビジネス オブジェクトとビジネス サービスを含む独自のビジネス レイヤがあるとします。そして、"SilverLight ビジネス アプリケーション" (SL v 4.0 を使用) を作成することを決定し、開発予定の SL アプリケーションから既に使用されているビジネス レイヤーを使用したいと考えています。
SL プロジェクトではないプロジェクトを含めることができないことを知っています。
これを達成できるか教えていただけますか?
ありがとう
ビジネス オブジェクトとビジネス サービスを含む独自のビジネス レイヤがあるとします。そして、"SilverLight ビジネス アプリケーション" (SL v 4.0 を使用) を作成することを決定し、開発予定の SL アプリケーションから既に使用されているビジネス レイヤーを使用したいと考えています。
SL プロジェクトではないプロジェクトを含めることができないことを知っています。
これを達成できるか教えていただけますか?
ありがとう
SL != .NET であるため、Silverlight コンパイラを使用して、Silverlight アセンブリでコンパイルする必要があります。言い換えれば、ちょっとした策略なしにそれらを直接消費することはできません。
1 つのオプションは、Silverlight プロジェクトを作成し、ファイル リンクを使用して .NET プロジェクトからコード ファイルを共有することです (複製せずに)。通常のプロジェクトはその中に含まれるファイルを所有しますが、「リンクされた」ファイルは、プロジェクトによって完全に所有されることなく、コンパイルのために含まれます。ファイルは、「ファイルの追加 > 既存のファイルの追加」ダイアログに移動してリンクされ、右下を見ると、既存のファイルを「リンク」できることがわかります。
次にできること:
Silverlight プロジェクトをコンパイルすると、リンクされたファイルが SL プロジェクトに属しているかのように扱われます (ただし、ドライブには .NET プロジェクト内に 1 つのコピーしかありません)。
すべての .NET 型が Silverlight でサポートされているわけではないため、ビジネス オブジェクトにこれらの型が含まれていると、.NET コードが Silverlight でコンパイルされない可能性があります。これらのケースでは、プリコンパイラ ディレクティブを使用して、2 つのメソッド シグネチャ (1x .NET と 1x SL 互換) を持つことができます。ディレクティブ (ie: Silverlight==True
) を設定すると、コンパイラはどちらかを選択します。
例えば:
#IF SILVERLIGHT
public void SomeMethod(SilverlightType someParam)
#ELSE
public void SomeMethod(SomeDotNetType someParam)
#ENDIF
これは、Rocky Lhotka (著者/CSLA.net フレームワーク デザイナー) によるウォークスルーのリンクです。彼は、リンクされたファイルや部分クラスを使用して、プラットフォームごとに選択的にコンパイルすることに言及しています。
RIA サービスを使用すると、サーバー側であらゆる種類の巧妙なトリックを実行できることがわかります (完全な .Net ライブラリへのリンクを含む)。Silverlight 専用ライブラリを使用する必要があるのは、クライアント側だけです。
Silverlight の実際の課題は、RIA 属性マークアップとカスタム バリデーターを介して、適切なビジネス ルールをクライアント側に公開することです。
実際には、クライアント側のルールはサーバー側とは少し異なる可能性があるため、クライアントで実際に検証する必要があるものを少し再考することは悪いことではありません。