То, что вы хотите сделать, это заменить напрямую, используя сеанс в ваших адаптерах. Вы хотите создать интерфейс, похожий на
public interface ISessionableObject
{
MyData Data { get; set; }
}
, а затем создайте 2 реализующих класса, аналогичных
public class HttpSessionedObject : ISessionableObject
{
public MyData Data {
get { return Session["mydata"]; }
set { Session["mydata"] = value; }
}
}
public class DictionaryObject : ISessionableObject
{
private readonly Dictionary<string, MyData> _dict =
new Dictionary<string, MyData>();
public MyData Data {
get { return dict ["mydata"]; }
set { dict ["mydata"] = value; }
}
}
Edit:
Просто если у вас есть путаница, что делать с этим, я уверен, что у вас есть что-то вроде этого:
public class Adapter
{
public void DoSomething()
{
var data = Session["mydata"];
...
}
}
Вместо этого вы захотите что-то вроде этого
public class Adapter
{
private readonly ISessionableObject _session;
public Adapter(ISessionableObject session)
{
_session = session;
}
public void DoSomething()
{
var data = _session.Data;
...
}
}
Я бы рекомендовал использовать Dependency Injection Framework, например StructureMap, для управления созданием ваших объектов, но это гораздо более обширная тема, не связанная с этим, поэтому, по крайней мере, при внедрении зависимостей от плохого человека ваш код будет похож на
public class AdapterUser
{
public void UsingPhone()
{
var adapter = Adapter(new HttpSessionedObject());
...
}
}
И
[UnitTest]
public class AdapterUserTest
{
[Test]
public void UsingPhone()
{
var adapter = Adapter(new DictionaryObject());
...
}
}