Я действительно застрял здесь.
У меня есть приложение asp.net mvc, и я использую StructureMap 2.5.3 (SM) для добавления классов обслуживания и хранилища в мои контроллеры.
Все контроллеры изготовлены на фабрике SM.
У меня также есть текст данных Linq to SQL, который я хотел кэшировать гибридом.
public class DBRegistry:Registry
{
public DBRegistry()
{
ForRequestedType<SharpShopDataContext>()
.CacheBy(StructureMap.Attributes.InstanceScope.Hybrid)
.TheDefault.IsThis(new SharpShopDataContext());
}
}
Кажется, что кеширование не работает, и из-за этого у меня возникают проблемы с текстом данных.
Все запросы нескольких браузеров возвращают один и тот же dbcontext ?!
В одном из моих классов репозитория я поместил этот код.
Debug.WriteLine ("хэш-код БД:" + db.GetHashCode () + "" + DateTime.Now.ToString ());
где db = текстовый текст
Я также печатаю хеш-коды хранилища, используя базу данных, и службу, использующую хранилище, здесь распечатывается несколько запросов:
Сервисный хэш-код: 6238972 26-3-2009 18: 59: 34
Хэш-код хранилища: 21756593 26-3-2009 18: 59: 34
дб хэш-код: 7043935 26-3-2009 18: 59: 34
Сервисный хэш-код: 59389065 26-3-2009 18: 59: 34
хэш-код хранилища: 8331620 26-3-2009 18: 59: 34
дб хеш-код: 7043935 26-3-2009 18: 59: 34
сервисный хэш-код: 11291358 26-3-2009 18: 59: 38
хэш-код хранилища: 13848497 26-3-2009 18: 59: 38
дб хеш-код: 7043935 26-3-2009 18: 59: 38
сервисный хэш-код: 42509361 26-3-2009 18: 59: 38
хэш-код хранилища: 56101068 26-3-2009 18: 59: 38
дб хэш-код: 7043935 26-3-2009 18: 59: 38
Как вы можете видеть, 7043935 - это хеш-код для текста данных каждый раз для каждого запроса, но служба и хранилище каждый раз получают новый экземпляр и хеш-код.
Я получаю странные ошибки из-за этого, например, исключение dataconcurrency, потому что dbcontext имеет исходное значение 4 веб-запросов назад, тогда как база данных была изменена другим источником.