Я хочу добавить легко доступный вспомогательный класс к моему asp mvc. Я создал класс под названием Репозитории. Он имеет статическое свойство «Current», который выполняет следующие действия:Является ли эта одна из них круглыми ссылками?
public static readonly Repositories Current
{
get
{
if(HttpContext.Current.Items["Repositories"] == null)
HttpContext.Current.Items["Repositories"] = new Repositories(HttpContext.Current);
return (Repositories)HttpContext.Current.Items["Repositories"];
}
}
Дело в том, что класс имеет статические вспомогательные функции, которые используют текущий экземпляр класса (привязан к текущей HttpContext). Вспомогательные функции выполняют всевозможные действия, поэтому я хотел организовать их таким образом, потому что он обеспечивает более красивый код в контроллерах, и у меня есть потенциальный доступ ко всем хранилищам баз данных (фактические объекты дескриптора создаются только при доступе в этот контекст, хотя).
В любом случае, как вы можете видеть, конструктор принимает в качестве аргумента значение HttpContext, которое затем хранится в поле частного класса, поэтому у меня было бы меньше типа. Это означает, что экземпляр класса Repositories ссылается на экземпляр класса HttpContext и наоборот. Когда значение HttpContext отбрасывается, означает ли это, что оно все еще хранится в памяти, сохраняясь круговой ссылкой с помощью экземпляра Repositories?
Когда вы ожидаете, что HttpContext будет удален? –
Помимо вашего вопроса, то, что вы здесь делаете, просто вводит переменные _global_. Я бы очень избегал такого дизайна, если бы я был вами: это приведет к непроверяемому коду. Вы должны вводить свои репозитории в свои контроллеры через конструктор, а не использовать HttpContext для их извлечения. –
На самом деле это не глобально, хотя если для каждого запроса задан вспомогательный класс? Я пробовал делать всю инъекцию, но ее просто так неуклюжий, я не люблю. – user81993