Я только начал с StructureMap, и я не получаю результаты, которые вы описываете.
Я выполнил простой тест с использованием простого класса, настроив Structuremap для кэширования с помощью HttpContext, и, как я вижу, CacheBy.HttpContext означает, что в рамках одного и того же запроса вы получите один и тот же экземпляр ... а не в рамках одного сеанса
Конструктор моего класса, устанавливает дату / время в приватном поле
У меня есть кнопка, которая получает 2 экземпляра MyClass с интервалом в одну секунду ...
Затем он отображает время обоих экземпляров в метке.
При первом нажатии этой кнопки объекты A и B являются одним и тем же экземпляром, поскольку время их создания точно такое же, как и ожидалось.
При повторном нажатии кнопки вы можете ожидать, что время создания не изменится, если экземпляры будут кэшироваться в сеансе ... однако в моем тесте я получаю новое время создания ...
Конфигурация структуры карты:
ObjectFactory.Initialize(x=>x.ForRequestedType<MyClass>(). CacheBy(InstanceScope.HttpContext));
событие нажатия кнопки на тестовой странице
protected void btnTest_Click(object sender, EventArgs e)
{
MyClass c = ObjectFactory.GetInstance<MyClass>();
System.Threading.Thread.Sleep(1000);
MyClass b = ObjectFactory.GetInstance<MyClass>();
lblResult.Text = String.Format("cache by httpcontext First:{0} Second:{1} session id {2} ", c.GetTimeCreated(), b.GetTimeCreated(),Session.SessionID);
}
MyClass
public class MyClass
{
private DateTime _timeCreated;
public MyClass()
{
_timeCreated = DateTime.Now;
}
public string GetTimeCreated()
{
return _timeCreated.ToString("dd/MM/yyyy hh:mm:ss");
}
}