📄 dataaccesscontext.cs
字号:
#region Copyright & License
//
// $Copyright:$
//
#endregion
#region Document Information
// $Author: Bai.shijun $
// $Rev: 558 $
// $Date: 05-10-08 16:12 $
#endregion
using System;
using System.Collections.Generic;
using System.Text;
using System.EnterpriseServices;
using Eai.Data;
using Eai.Data.Transaction;
namespace Eai.Data
{
public class DataAccessContext : IDisposable
{
internal const string DefaultCreatorName = "default";
private static object syncObj = new Object();
private IDictionary<string, IDataAccessorCreator> daCreators = new Dictionary<string, IDataAccessorCreator>();
/// <summary>
/// DataAccessorCreator list.
/// </summary>
private static IDictionary<string, IDataAccessorCreator> GlobalDataAccessorCreators = new Dictionary<string, IDataAccessorCreator>(10);
static DataAccessContext()
{
foreach (IDataAccessorCreatorConfig creatorConfig in Setting.Current.DataAccessorCreators.Values)
{
string name = creatorConfig.Name;
string typeName = creatorConfig.Type;
Type type = Type.GetType(typeName);
IDataAccessorCreator creator = (IDataAccessorCreator)Activator.CreateInstance(type);
creator.Config = creatorConfig;
GlobalDataAccessorCreators.Add(name, creator);
}
}
private DataAccessContext()
{
}
[ThreadStatic]
private static DataAccessContext currentContext;
public static DataAccessContext Current
{
get
{
if (currentContext == null)
{
lock (syncObj)
{
if (currentContext == null)
{
currentContext = new DataAccessContext();
IEnumerator<KeyValuePair<string, IDataAccessorCreator>>
e = GlobalDataAccessorCreators.GetEnumerator();
for (; e.MoveNext(); )
{
string key = e.Current.Key;
IDataAccessorCreator creator = e.Current.Value;
currentContext.daCreators.Add(key, creator);
}
}
}
}
return currentContext;
}
}
public void RenewDataAccessor()
{
dataAccessors.Clear();
}
private IDictionary<string, IDataAccessor> dataAccessors = new Dictionary<string, IDataAccessor>();
public IDataAccessor GetDataAccessor()
{
return GetDataAccessor(DefaultCreatorName);
}
public IDataAccessor GetDataAccessor(string dataAccessorName)
{
IDataAccessor dataAccessor = null;
TransactionManager transManager = TransactionManager.Instance;
if (transManager.IsInTransaction)
{
dataAccessor = transManager.CurrentTransaction.GetDataAccessor(dataAccessorName);
if (dataAccessor == null)
{
dataAccessor = CreateDataAccessor(dataAccessorName);
transManager.CurrentTransaction.AttachDataAccessor(dataAccessorName, dataAccessor);
}
}
else
{
if (dataAccessors.ContainsKey(dataAccessorName)) dataAccessor = dataAccessors[dataAccessorName];
if (dataAccessor == null)
{
dataAccessor = CreateDataAccessor(dataAccessorName);
dataAccessors.Add(dataAccessorName, dataAccessor);
}
}
return dataAccessor;
}
private IDataAccessor CreateDataAccessor(string dataAccessorName)
{
if (!daCreators.ContainsKey(dataAccessorName))
{
throw new Exception("Not existed name '" + dataAccessorName + "' DataAccessorCreator.");
}
IDataAccessorCreator creator = daCreators[dataAccessorName];
IDataAccessor dataAccessor = creator.Create();
return dataAccessor;
}
#region IDisposable Members
public void Dispose()
{
;
}
#endregion
#region only for test
#if DEBUG
public IDictionary<string, IDataAccessorCreator> DataAccessorCreators
{
get { return daCreators; }
}
#endif
#endregion
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -