9

BlockData クラスが IContent を直接実装しない理由を知っている人はいますか? BlockData がデータベースから取得されている間、Castle によって作成されたプロキシは IContent を実装することを知っています。

StackOverflow がこの種の質問に適していない場合は、移動してください。

4

3 に答える 3

4

BlockData は、PageData インスタンス (別名ローカル ブロック) などの別のコンテンツ アイテムに追加された場合と、スタンドアロン インスタンス (別名共有ブロック) の両方で機能することを意図しているため、IContent を実装します。後者の場合、Castle Windsor を介して mix-in を使用してインターフェイスを追加し、参照できるようにします。

このコンストラクトの決定は、ブロックがローカルか共有かに関係なく、同じレンダリング テンプレートを使用できるようにすることに基づいていました。そのため、ローカル ブロックに多数の空のプロパティを持つか、ミックスインを使用する現在のソリューションのどちらかを選択する必要がありました。両方のオプションがテストされ、最適なソリューションではありませんが、ミックスインが選択されました。

于 2015-04-29T21:50:29.650 に答える
1

BlockData は「IContent を実装しています」。

var myContent = (IContent)myBlock;

ただし、それ自体プロパティ(ContentReference ではない) である Block を処理している場合、そのキャストは例外をスローします。

これは、すべてのケース (... Math.Round を使用) の 100% に当てはまります。

于 2015-10-17T06:00:00.137 に答える