Спасибо за ваши ответы.К сожалению, потому что я настолько новичок в этой области (с очень ограниченным временем в моих руках), я теперь еще больше смущен, чем был раньше.Из того, что я понял, веб-формы не предназначены для использования с IoC, и хотя существуют обходные пути, они довольно сложны.Я думаю, что откажусь от Windsor, пока не перенесу проект в MVC, сейчас я использовал простой статический SessionManager
класс.
Затем SessionManager отвечает за создание экземпляра SessionFactoriesContainer
во время App_Init, определяемого как:
public static readonly Dictionary<string, ISessionFactory> SessionFactoriesContainer = new Dictionary<string, ISessionFactory>();
и SessionsContainer
определены как:
public static Dictionary<string, ISession> SessionsContainer
{
get
{
Dictionary<string, ISession> sessionContainer = (Dictionary<string, ISession>)HttpContext.Current.Items[SESSION_CONTAINER_KEY] ?? new Dictionary<string, ISession>();
foreach (FactoryType type in Enum.GetValues(typeof(FactoryType)))
{
if (!sessionContainer.ContainsKey(type.ToString()))
sessionContainer.Add(type.ToString(), null);
}
HttpContext.Current.Items[SESSION_CONTAINER_KEY] = sessionContainer;
return sessionContainer;
}
}
Хотя SessionsContainer
является статическим, поскольку он хранится в HttpContext, я понимаю, что у каждого пользователя будет свой контейнер, я не правпредполагая это?
SessionManager также имеет класс GetSessionFor
, определенный как:
public static ISession GetSessionFor(FactoryType type)
{
ISession session = SessionsContainer[type.ToString()] ?? SessionFactoriesContainer[type.ToString()].OpenSession();
session.BeginTransaction();
SessionsContainer[type.ToString()] = session;
return session;
}
Этот метод вызывается всякий раз, когда требуется новый репозиторий, и ISession затем передается конструктору.В конце запроса каждый открытый сеанс будет либо зафиксирован, либо транзакция будет откатана в случае ошибок.
Я понимаю, что это очень грубая реализация, но я думаю, что она должна работать.Если у меня будет время в конце проекта, я собираюсь вернуться к управлению сессиями и, надеюсь, внедрить установщики.В то же время, если у кого-то есть еще идеи, пожалуйста, не стесняйтесь их добавлять.