Внедрение свойств Unity 2, как я могу перевести config в свободный синтаксис? - PullRequest
2 голосов
/ 06 сентября 2010

У меня есть httpHandler и, используя Unity 2, я хотел бы добавить зависимость в мой HttpHandler.

Мой код выглядит так:

public class MyHandler : BaseHandler
{

    public MyHandler()
    {
    }

    public IConfigurationManager Configuration
    {
        get;
        set;
    }

    ...
}

Используя web.config, я настроил бы его следующим образом (для простоты оставил остальные настройки):

<type type="MyHandler">
   <typeConfig extensionType="Microsoft.Practices.Unity.Configuration.TypeInjectionElement, Microsoft.Practices.Unity.Configuration">
      <property name="Configuration" propertyType="IConfigurationManager">
        <dependency/>
      </property>
   </typeConfig>
</type>

Как бы я поступил так же, используя свободный синтаксис? Все, что я пробовал до сих пор, оставляет свойство равным нулю при срабатывании обработчика.

Спасибо

Ответы [ 2 ]

1 голос
/ 07 сентября 2010

ConfigureInjectionFor устарел с момента выпуска Unity 1.2.

Это должно работать:

container.RegisterType<MyHandler>(
    new InjectionProperty("Configuration"));
0 голосов
/ 06 сентября 2010

Вы должны вызвать метод ConfigureInjectionFor.

myContainer.Configure<InjectedMembers>()
    .ConfigureInjectionFor<MyHandler>(
            new InjectionProperty("Configuration", 
                                  new ResolvedParameter<IConfigurationManager>())
                                 )
            )

РЕДАКТИРОВАТЬ:

Вот пример фабрики обработчика.Это позволяет вам создать ваш обработчик

 class HandlerFactory : IHttpHandlerFactory
    {
        public IHttpHandler GetHandler(HttpContext context, string requestType, String url, String pathTranslated)
        {
            return MyContainerProvider.Container.Resolve<MyHandler>();
        }
        public void ReleaseHandler(IHttpHandler handler)
        {
        }
        public bool IsReusable
        {
            get { return false; }
        }
    }

Затем вам нужно зарегистрировать фабрику в вашем веб-приложении (чтобы IIS мог его найти).Вы можете найти более подробную информацию здесь .

...