複雑なショッピングカート構造になっています。複雑さは価格設定構造にあります。すべての価格を計算するには、かなりの数の個別のデータベースエンティティが必要です。複雑なため、各顧客のショッピングカートのデータは少量しか保存されません。カートが必要な場合は、それらのカートデータのすべてと、データベースから多くの価格設定部分を読み取ります-(編集)結果を入力します合計で完了したショッピングカートオブジェクト。残念ながら、これは時間的に比較的費用がかかります。
マスターサイトのレイアウト(編集)は、ショッピングカートオブジェクトを取得し、ショッピングカートへのリンクを公開し、カートにアイテムがある場合は未払い額を表示します。
カートの他の情報が表示される場合と表示されない場合があるページがあります。たとえば、「About Us」ページにはカートは必要ありませんが、サイトレイアウトにはカートが必要です。
ショッピングカートのグローバルオブジェクトを設定しました。マスターサイトのレイアウトからそのオブジェクトにアクセスできます。ページのビューモデルに入れることもできます。
そのため、マスターサイトのレイアウトがショッピングカートをインスタンス化し、ビューモデルがショッピングカートを個別にインスタンス化する場合があります。
(編集)したがって、サイトレイアウトでは、すべてのページにショッピングカートオブジェクトが必要です。ページには、ショッピングカートオブジェクトが必要な場合と不要な場合があります。
問題:ビューには、マスターサイトのレイアウトで使用できるようにViewBagに入れることができるショッピングカートがある場合とない場合があります。ショッピングカートオブジェクトをライフサイクルで1回だけインスタンス化するにはどうすればよいですか?
public class ShoppingCart
{
// Complex, data intensive calculations upon instantiation
}
public class myViewModel
{
public ShoppingCart cart {get; set;}
}
マスターサイトのレイアウト:
@{
ShoppingCart cart = new ShoppingCart(GlobalMemberID);
}
ショッピングカートが必要なページ:
@model myViewModel