У меня есть процесс asp.net, который также использует сообщения из сервисной шины (MassTransit). Для веб-запросов мой сеанс базы данных разрешается с помощью образа жизни PerWebRequest.
Но когда процесс использует сообщение от MassTransit, мне нужен сеанс базы данных для другого образа жизни, поскольку HttpContext недоступен.
Я сделал это:
public class PerRequestLifeStyleManager : ILifestyleManager
{
readonly PerWebRequestLifestyleManager perWebRequestLifestyleManager;
readonly PerThreadLifestyleManager perThreadLifestyleManager;
public PerRequestLifeStyleManager()
{
perWebRequestLifestyleManager = new PerWebRequestLifestyleManager();
perThreadLifestyleManager = new PerThreadLifestyleManager();
}
public void Init(IComponentActivator componentActivator, IKernel kernel, ComponentModel model)
{
perWebRequestLifestyleManager.Init(componentActivator, kernel, model);
perThreadLifestyleManager.Init(componentActivator, kernel, model);
}
public object Resolve(CreationContext context)
{
return GetManager().Resolve(context);
}
public bool Release(object instance)
{
return GetManager().Release(instance);
}
public void Dispose()
{
GetManager().Dispose();
}
ILifestyleManager GetManager()
{
if (HttpContext.Current != null)
{
return perWebRequestLifestyleManager;
}
return perThreadLifestyleManager;
}
}
Может кто-нибудь сказать мне, если это правильный путь? А если нет, то что?
Спасибо.
РЕДАКТИРОВАТЬ: я только что обновил вопрос с некоторым кодом, который, кажется, работает (до того, как он не был проверен). Я все еще хочу знать, является ли это - если смотреть с точки зрения Виндзора - безопасным и надежным.