そのようなことをしているとしたら、データコンテキストをすでに認識していて、監査モデルをサービスレイヤーに渡す一般的な監査ロギングメソッドをサービスレイヤーに実装することになると思います。このように、アプリケーションのさまざまな部分(コントローラーに関連していない可能性もあります)をログに記録する必要がある場合は、何も再実装する必要はありません。
あるいは、コントローラーだけに固執したい場合は、データコンテキストのインターフェイスを作成することもできます
public interface IDataContext<T> where T : DbContext
{
T DataContext { get; }
}
とともに実装するBaseControllerを作成しますSystem.Web.Mvc.Controller
public class BaseController : Controller, IDataContext<YourDbContextClass>
{
public YourDbContextClass DataContext { get { return new YourDbContextClass(); } }
}
この基本クラスをコントローラーで使用し、を介してコンテキストに到達DataContext
できますが、ロギングの場合は、オーバーライドされたメソッドを使用して新しいクラスを作成できます。
public class AuditController : BaseController
{
protected override void OnActionExecuting(ActionExecutingContext filterContext)
{
// whatever you do inside here
// DataContext.LaDiDa
}
}
そしてそれからあなたのものを継承します
public class HomeController : AuditController
{
public ActionResult Index()
{
return View();
}
}
これは最も簡単な解決策ではありませんが、インターフェイスをすべて一緒に失い、ですべてを実行する可能性がありますが、あなたがBaseController
あなたのために働く何かを見つけた場合に備えて、私はボードに何かを投げています。