Was Sie tun möchten, ist die direkte Ersetzung durch eine Sitzung in Ihren Adaptern. Sie wollen eine Schnittstelle erstellen, etwa wie
public interface ISessionableObject
{
MyData Data { get; set; }
}
und erstellen Sie dann 2 implementierende Klassen ähnlich wie
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; }
}
}
Edita:
Nur für den Fall, dass Sie sich nicht sicher sind, was Sie damit anfangen sollen, bin ich sicher, dass Sie so etwas haben:
public class Adapter
{
public void DoSomething()
{
var data = Session["mydata"];
...
}
}
Stattdessen brauchen Sie etwas wie dieses
public class Adapter
{
private readonly ISessionableObject _session;
public Adapter(ISessionableObject session)
{
_session = session;
}
public void DoSomething()
{
var data = _session.Data;
...
}
}
Ich würde empfehlen, ein Dependency Injection Framework wie StructureMap zu verwenden, um die Erstellung Ihrer Objekte zu handhaben, aber das ist ein viel größeres Thema, das nicht mit diesem Thema zusammenhängt, so dass zumindest mit armen Menschen Abhängigkeit Injektion gehen Ihr Code ähnlich sein wird
public class AdapterUser
{
public void UsingPhone()
{
var adapter = Adapter(new HttpSessionedObject());
...
}
}
Und
[UnitTest]
public class AdapterUserTest
{
[Test]
public void UsingPhone()
{
var adapter = Adapter(new DictionaryObject());
...
}
}