ApiController(MVC4)に独自のAppContextが必要です。
次のようなものにする必要があります
public class TestController : BaseApiController
{
[HttpGet]
public IEnumerable<TestVM> GetAll()
{
// the test service is injected with SimpleInjector
return _testService.GetAll(**base.AppContext**);
}
}
しかし、ApiControllerはセッションにアクセスしていません。特定のキーに対してセッションを「アクティブ化」するための解決策はありますか(セッション全体が必要ないため)?または、他のアイデア(キャッシュまたはCookie)はありますか?
これはBaseApiControllerです
public abstract class BaseApiController: ApiController
{
public IAppContext AppContext
{
get { return SessionState.AppContext; }
}
}
これは私のIAppContextです(将来的にはより多くのプロパティがあります)
public interface IAppContext
{
IIdentity User { get; }
/// <summary> Gets the user id. </summary>
/// <value>The user id.</value>
int IdUser { get; }
}
ここでは、web.configに登録されているアプリケーションモジュール
public class ApplicationModule : IHttpModule
{
// ...
SessionState.AppContext = _appContext.InitializeNew(
HttpRuntime.AppDomainAppPath, languages);
// ...
}
AppContextを取得するSessionStateクラス
public class SessionState : BaseSessionVariables
{
public static IAppContext AppContext
{
get { return SessionState.Get<IAppContext>("AppContext"); }
set { SessionState.Set("AppContext", value); }
}
}
ここでBaseSessionVariablesクラス
public static HttpSessionState GetSession()
{
return HttpContext.Current.Session;
}
protected static T Get<T>(string key) where T : class
{
var session = BaseSessionVariables.GetSession();
if (session == null)
{
throw new Exception("No session");
}
return (session[key] as T);
}
ご協力いただきありがとうございます!