シェイプを有効にした後、自分のレイアウトにシェイプを挿入しようとしています。私はIShapeFactoryEventsがこれには完璧だと考えましたが、POST中にこの問題が発生した場合、ここからCMSに問い合わせると「TransactionScope入れ子に間違った例外」が表示されます。誰かが私のために知恵の言葉をもう一度持っていたのだろうか?下記の私のコードスニペットを見てください。IShapeFactoryEventsからオーチャードCMSに問い合わせする
public void Created(ShapeCreatedContext context)
{
if (context.ShapeType == "Layout")
{
if (!AdminFilter.IsApplied(_services.WorkContext.HttpContext.Request.RequestContext))
{
var route = RouteTable.Routes.GetRouteData(_services.WorkContext.HttpContext);
object location;
if (route.Values.TryGetValue("location", out location))
{
var region = _services.ContentManager.Query("Region")
.Join<RoutePartRecord>()
.Where(x => x.Slug == (string)location)
.Slice(1).FirstOrDefault();
context.Shape.Header.Add(context.New.CurrentRegion(Title: region.As<RoutePart>().Title), "10");
}
context.Shape.Navigation.Add(context.New.RegionSelector(Regions: _services.ContentManager.Query(VersionOptions.Published, "Region").List()), "11");
}
}
}
もう一度、前もって感謝します。あなたは素晴らしいです。
おかげで、御馳走を働きました。あなたのサイトはどのように進んでいますか?まだ生産中ですか? – Brendan
@Brendan - うん、私たちは6月にそれを開始した:[aclj.org](http://aclj.org) –
@Chrisもう一つの解決策は 'Tsh'の代わりに' Work 'を' IShapeTableProvider'の実装ctor。次に、 'Work 'の 'Value'プロパティを介して基礎となるオブジェクトにアクセスできます。現在のコンテキストに適したインスタンスを返します。要求ごとの依存関係をシングルトンの依存関係に挿入する必要がある場合に便利です。 –