我正在尝试使用诸如行为的临时数据来构建一个强类型的复杂会话类。对于如何设置值以确保数据持久性,我有点困惑。
我在代码草图下面有几个问题
public class SomeService : ISomeService
{...
ServiceObject _serviceObject;
public SomeService(){
_serviceObject = new ServiceObject();
}
public SomeMethod(int z){
if (ServiceObject.A != null){
_serviceObjct.A = SomeMethodToGenerateA(z);
}
return _serviceObjct.A;
}
[Serializable]
private class ServiceObject{
public string A {
get { return GetFromSession().a;}
set { var sO = GetFromSession();
sO.a = value;
StoreInSession(sO);}
}
prop B ...
prop C ...
prob D ...
private const string ServiceObjectKey = ServiceObjectKey
private void StoreInSession( ServiceObject nO ){
Session[ServiceObjectKey] = nO;
}
private ServiceObject GetFromSession( ){
return (ServiceObject)Session[ServiceObjectKey];
}
public void ClearObject(){
Session[ServiceObjectKey] = new ServiceObject();
}
} }
q1。会话变量是否通过引用起作用?IE。将
public string A {
get { return GetFromSession().a;}
set { var sO = GetFromSession();
sO.a = value;}
}
工作而不是
public string A {
get { return GetFromSession().a;}
set { var sO = GetFromSession();
sO.a = value;
StoreInSession(sO)}
}
q2。对于这个对象,我应该考虑其他任何考虑因素吗?在某些时候,它可能必须被移动到进程外存储中。它会访问很多会话(每个请求最多 12 次!)
q3。这个设计模式有名字吗?
如果你得到 2/3 的问题,你就赢了!
另外,我打算将其用作临时数据对象。在 onactionexecuted 方法中的请求结束时,我将清除对象 [ if(!actionresult is RedirectResult),然后重置对象]
Meta:(如果这个问题在论坛上比在 SO 网站上更合适,请私信我,我应该在哪里发布它,我会立即删除它。我有点意识到这个 q 不太合适。)