6
これをベースAPIControllerとして使用すると、主に、私は上のセッションオブジェクトのライフサイクルを管理するために、アクションフィルタ属性を使用して好む...対私は他の場所で見てきたExecuteAsync方法、WebAPIとRavenDBでの基本的なセッション処理
using System;
using System.Net.Http;
using System.Threading;
using System.Threading.Tasks;
using System.Web.Http;
using System.Web.Http.Controllers;
using Raven.Client;
using Raven.Client.Document;
public abstract class RavenDbController : ApiController
{
private IDocumentStore _documentStore;
public IDocumentStore Store
{
get { return _documentStore ?? (_documentStore = LazyDocStore.Value); }
set { _documentStore = value; }
}
protected override void Initialize(HttpControllerContext controllerContext)
{
Session = Store.OpenSession();
base.Initialize(controllerContext);
}
protected override void Dispose(bool disposing)
{
using (Session)
{
Session.SaveChanges();
}
}
public IDocumentSession Session { get; set; }
}
は偉大に見えますが、私はそれに打撃を与えるだろう。 –
@FitzchakYitzchaki:質問で(簡単に見える)アプローチの代わりにこれを使用したいのはなぜですか? *(注:私はWeb API **と** RavenDB初心者ですので、何か不足している可能性があります)* –
これは、ベースコントローラに属性を追加するのではなく、属性をカプセル化するためです。これにより、ベースコントローラをより清潔に保ちます。 –