Details
-
Improvement
-
Status: Closed
-
Minor
-
Resolution: Fixed
-
None
-
None
Description
The interfaces and abstract class in IBatisNet.DataAccess.SessionScope and IBatisNet.DataMapper.SessionScope should be combined and moved into IBatisNet.Common and a new interface named IBatisNet.Common.SessionStore.ISessionStoreFactory should be created:
public interface ISessionStoreFactory
{
void Initialize(IDictionary properties);
ISessionStore GetSessionStore(string sessionStore);
// void Shutdown(); ???
}
"setting" nodes in the SqlMap.config file currently only contains boolean values. I think we should keep with that convention if possible and introduce a seperate node named "sessionStoreFactory" that should mimic the custom cache support (allow properties to be passed into the Initialize method):
<sessionStoreFactory type="Company.IBatisNet.CustomSessionStoreFactory, Company.IBatisNet">
<property name="Hello" value="World" />
</sessionStoreFactory>
IBatisNet should ship with at least two factories:
CallContextSessionStoreFactory
HybridSessionStoreFactory (HttpContext != null ? HttpContextSessionStore : CallContextSessionStore)
The default factory would be HybirdSessionStoreFactory. The user could manually specify one of the built-in factories by using an upper case alias:
<sessionStoreFactory type="CALLCONTEXT" />
<sessionStoreFactory type="HYBRID" />
For the DataAccess project, a context could use a custom session store factory like this:
<daoSessionHandler id="SqlMap">
<property name="resource" value="SqlMap_MSSQL_OleDb.config"/>
<property name="sessionStoreFactory" value="Company.IBatisNet.CustomSessionStoreFactory, Company.IBatisNet"/>
<property name="Hello" value="World"/>
</daoSessionHandler>
The IDictionary passed into ISessionStoreFactory.Initialize would contain three keys: resource, sessionStoreFactory, and Hello.
If you wanted to always use CALLCONTEXT with a data access context:
<daoSessionHandler id="SqlMap">
<property name="resource" value="SqlMap_MSSQL_OleDb.config"/>
<property name="sessionStoreFactory" value="CALLCONTEXT"/>
</daoSessionHandler>