Как внедрить зависимость от класса страницы с помощью Microsoft Unity 2.0? - PullRequest
0 голосов
/ 16 сентября 2011

У меня есть страница со следующим свойством:

    public partial class CustomPage : Page
{
    [Dependency]
    public ILogger Logger { get; set; }

    protected void Page_Load(object sender, EventArgs e)
    {
        Response.Write((this.Logger == null) ? "Not initialized" : "Initialized");
    }
}

Как видно, ILogger - это зависимость, которая должна быть внедрена в этот класс.

Файл конфигурации Unity имеетбыл настроен так:

<unity>
  <alias alias="ILogger" type="Logging.ILogger, AssemblyName" />
  <alias alias="Logger" type="Logging.Logger, AssemblyName" /> 
  <container>
    <register type="ILogger" mapTo="Logger">
      <lifetime type="singleton"/>
    </register>   
  </container>
</unity>

В моем файле Global.ascx событие Application_Start у меня есть следующий код:

var container = new UnityContainer();
container.LoadConfiguration();
container.Resolve<CustomPage>();

Я ожидаю, что при запуске CustomPage ILoggerполучить инъекцию, но фактическое поведение таково, что оно всегда равно нулю.

Как правильно его настроить?

Спасибо

Ответы [ 3 ]

0 голосов
/ 16 сентября 2011

Я создал базовый класс страницы, где внедрение свойства происходит в Page_PreInit:

public class BasePage<T> : Page where T: class
{
    [Dependency]
    public ILogger Logger { get; set; }

    protected void Page_PreInit(object sender, EventArgs args)
    {
        ((IContainerAccessor)HttpContext.Current.ApplicationInstance).Container.BuildUp<T>(this as T);
    }
    }

Нет необходимости иметь отдельный обработчик.

0 голосов
/ 04 мая 2013

Вы можете написать HttpModule и обработать одно из событий перед запросом, которые запускаются по запросу и после создания вашей страницы. Это то место, где вам нужно ввести свои свойства.

0 голосов
/ 16 сентября 2011

Использовать фабрику страниц ASP.NET.

Вам нужно добавить конструктор в ваш класс CustomPage и в Factory, чтобы передать соответствующие аргументы.

Яир

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