Мне нужен способ хранения объекта регистрации на запрос. С HttpContext я бы добавил это в словарь статей. Я не хочу приводить HttpContext в это, если могу помочь. Ниже приведен код, который я предлагаю для Unity LifeTimeManager, который будет хранить объекты в свойстве OwinContext Environment, к которым у меня есть доступ с моим промежуточным программным обеспечением Owin.
public class OwinContextLifetimeManager : LifetimeManager
{
private string key = (new Guid()).ToString();
private IDictionary<string, object> environment;
public OwinContextLifetimeManager(IDictionary<string, object> environment)
{
this.environment = environment;
}
public override object GetValue()
{
if (environment != null && environment.ContainsKey(key))
return environment[key];
else
return null;
}
public override void RemoveValue()
{
if (environment != null)
environment.Remove(key);
}
public override void SetValue(object newValue)
{
if (environment != null)
environment[key] = newValue;
}
}
Затем я могу использовать его как это из моего промежуточного ПО:
container.RegisterType<IRequestLog, RequestLog>(new OwinContextLifetimeManager(environment));
Мне кажется, что я могу выбрать любой ключ, который я хочу, кроме тех, которые уже зарезервированы Owin. Есть ли какая-то причина, по которой я не должен использовать OwinContext.Environment для этой цели? Документация MSDN неясна в отношении лучших практик этого.
Ответ Darrel Miller здесь: Как хранить данные для каждого запроса при использовании OWIN для Self-Host ASP.NET Web API, позволяет мне полагать, что коллекция свойств на объект запроса - путь. Как я могу получить доступ к этому объекту из промежуточного программного обеспечения?