Должен ли составной корень быть временным или запрашиваемым при использовании ASP.NET с Castle Windsor? - PullRequest
0 голосов
/ 18 марта 2012

Следуя предложению «Инъекция зависимостей в .NET», я разрешаю корень композиции в каждом конструкторе страниц следующим образом:

public MyPageConstructor()
{
    var container = (Castle.Windsor.WindsorContainer)HttpContext.Current.Application["DIcontainer"];
    Controller = container.Resolve<MyPageController>();
}

Теперь, если я сделаю контроллер временным, я должен отпустить его вручную, когда страница выгружена. Если я сделаю это по запросу, Castle выдаст его для меня, когда запрос будет завершен, но может быть снижение производительности, я не уверен. В настоящий момент я стараюсь сделать объекты временными и самостоятельно справляться с выпуском.

Есть ли еще что-то, что стоит рассмотреть, и какова будет рекомендуемая практика?

Спасибо.

Ответы [ 2 ]

2 голосов
/ 19 марта 2012

Рекомендую использовать максимально возможный срок службы. К сожалению, сложное приложение может иметь более одной точки входа, где вызван метод Resolve. И если вы выберете Transient, существует риск, что некоторые сервисы будут создаваться несколько раз за запрос. Например, некоторые HttpModule могут использовать те же сервисы, что и Page. С помощью срока службы PerRequest такой проблемы можно избежать.

0 голосов
/ 19 марта 2012

Зависит от того, что если у вас есть класс, который имеет много зависимостей, накладные расходы на создание одной и той же вещи снова и снова могут быть слишком серьезными.Но если есть что-то, что не является потокобезопасным, вы лучше, чем переходный.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...