У меня небольшая проблема, препятствующая появлению значений в области видимости для всех пользователей. Я не уверен, что именно я могу делать не так, но я в конце концов. Я думаю, что мои объекты-контейнеры имеют неправильную область видимости или я передаю значения по WebContext. Во-первых, вот что я делаю в коде. Это работает, но показывает детали для первого пользователя, который заходит на сайт (примечание: мой PageStore - это просто свойство типа IDictionary, в котором хранятся значения, которые будут доступны всем пользовательским элементам управления на странице):
using (BasePage page = (BasePage)(Spring.Web.UI.Page)this.Context.Handler) {
if ((page.PageStore("LoginId") != null)) {
this.Model.LoginId = Convert.ToString(page.PageStore("LoginId"));
}
}
Во-вторых, я пробовал разные области для своих объектов, но я выхожу пустым. Вот как мои объекты сейчас настроены в контейнере:
Фрагмент конфигурации моего бизнес-уровня
<!-- Transaction Management Strategy - local database transactions -->
<object id="transactionManager"
type="Spring.Data.Core.AdoPlatformTransactionManager, Spring.Data" scope="request">
<property name="DbProvider" ref="MyProvider"/>
</object>
<tx:attribute-driven transaction-manager="transactionManager" />
<!-- Data Access Objects -->
<object id="DataAccess" type="MyApp.Business.DataAccess.DataAccess, MyApp.Business.DataAccess" abstract="true" scope="request">
<property name="AdoTemplate" ref="MyTemplate" />
</object>
<object id="ManagerDAO" type="MyApp.Business.DataAccess.ManagerDAO, MyApp.Business.DataAccess" parent="DataAccess" scope="request">
<property name="TableName" value="vw_managers" />
<property name="IsAllowedDeletion" value="False" />
<property name="IsAllowedUniqueIdRetrieval" value="False" />
</object>
<!-- Services -->
<object id="SearchService" type="MyApp.Business.Services.SearchService, MyApp.Business.Services" scope="request">
<property name="ManagerDAO" ref="UserDAO" />
</object>
Фрагмент моего уровня представления:
<object id="BasePageModel" type="MyApp.Presentation.Models.BasePageModel, MyApp.Presentation" abstract="true" scope="session"/>
<object id="ManagerModel" type="MyApp.Presentation.Models.ManagerModel, MyApp.Presentation" parent="BasePageModel" scope="session"/>
<!-- Presenters-->
<object name="ManagerPresenter" type="MyApp.Presentation.Presenters.ManagePresenter, MyApp.Presentation" singleton="false" scope="session">
<property name="SearchSvc" ref="SearchService"/>
</object>
Фрагмент объектов моего пользовательского интерфейса:
<!-- Pages -->
<object id="BasePage" type="MyApp.UI.BasePage, MyApp.UI" abstract="true" singleton="false" scope="session" />
<object id="StandardPage" parent="BasePage" abstract="true" singleton="false" scope="session">
<property name="MasterPageFile" value="~/Layouts/Site.master"/>
</object>
<object type="~/Pages/Manager.aspx" parent="StandardPage" singleton="false" scope="session"/>
Я знаю, что у этого кота есть 100 способов, но самое быстрое решение - просто правильно настроить его и продолжить работу. У меня нестабильная конфигурация или все неправильно?
Редактировать: здравый смысл начинает действовать .... IDictionary не безопасен для потоков.