То, что вы хотите сделать, это заменить непосредственно с помощью сеанса в адаптерах. Вы хотите создать интерфейс что-то вроде
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());
...
}
}