Мне нужен способ хранения объекта регистрации в запросе. С HttpContext я бы добавил это в словарь статей. Я не хочу приводить HttpContext в это, если могу помочь. Ниже приведен код, который я предлагаю для Unity LifeTimeManager, который будет хранить объекты в свойстве среды OwinContext, к которому у меня есть доступ с моим промежуточным программным обеспечением Owin.Должен ли я использовать среду OwinContext для хранения данных конкретного приложения для запроса
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 здесь: How should I store per request data when using OWIN to Self-Host ASP.NET Web API заставляет меня полагать, что коллекция свойств на объекте запроса - путь. Как я могу получить доступ к этому объекту из промежуточного программного обеспечения?
Я отредактировал ваше название. Пожалуйста, смотрите: «Если вопросы включают« теги »в их названиях?] (Http://meta.stackexchange.com/questions/19190/), где консенсус« нет, они не должны ». –
Я знаю, что это старый вопрос, но я хотел бы отметить, где вы создаете ключ 'new Guid()' должен быть 'Guid.NewGuid()'. 'new Guid()' каждый раз создает пустой guid (все нули - 'Guid.Empty'). –
Полезно знать. Оказывается, поскольку он сохраняет его в контексте запроса, я просто использовал константу вместо сохранения идентификатора. – codetoast