Controller.RequestやController.Sessionなどのプロパティが仮想でないのはなぜですか?
私はそれが私の顔を見つめているに違いない。もしそうなら謝罪する.
これが私が持っているもので、改善しようとしています。モックControllerBase
/スタブ/フェイク (何でも) を注入できますが、これは弱い設計であり、微妙なバグにつながる可能性があることを知っています (依存関係にアクセサーの使用を強制するものは何もありません)。
public class ControllerBase : Controller
{
private readonly ModelStateDictionary modelStateDictionary;
private readonly HttpRequestBase request;
private readonly HttpSessionStateBase session;
public ControllerBase()
{
session = null;
request = null;
modelStateDictionary = null;
}
public ControllerBase(HttpSessionStateBase ssb, HttpRequestBase rq, ModelStateDictionary msd)
{
session = ssb;
request = rq;
modelStateDictionary = msd;
}
protected HttpSessionStateBase GetSession()
{
return session ?? Session;
}
protected HttpRequestBase GetRequest()
{
return request ?? Request;
}
protected ModelStateDictionary GetModelState()
{
return modelStateDictionary ?? ModelState;
}
}