Unity 2 属性注入,如何将配置转换为流畅的语法?

发布于 2024-09-17 23:44:12 字数 770 浏览 5 评论 0原文

我有一个 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>

我将如何使用流畅的语法做同样的事情?到目前为止,我尝试过的所有操作都会在处理程序触发时将属性设置为 null。

谢谢

I have a httpHandler and using Unity 2 I would like to inject a dependency into my HttpHandler.

My code looks like:

public class MyHandler : BaseHandler
{

    public MyHandler()
    {
    }

    public IConfigurationManager Configuration
    {
        get;
        set;
    }

    ...
}

Using the web.config I would configure it like this (left out the rest of the config for simplicity) :

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

How would I go about doing the same thing using fluent syntax? Everything I have tried so far leaves the property set to null when the handler fires.

Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

自 Unity 1.2 发布以来,ConfigureInjectionFor 已过时。

这应该有效:

container.RegisterType<MyHandler>(
    new InjectionProperty("Configuration"));

ConfigureInjectionFor has been obsolete since Unity 1.2 was released.

This should work:

container.RegisterType<MyHandler>(
    new InjectionProperty("Configuration"));
笑红尘 2024-09-24 23:44:13

您必须调用 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; }
        }
    }

然后,您必须在 Web 应用程序中注册工厂(以允许 IIS 找到它)。您可以在此处找到更多详细信息。

You have to call the ConfigureInjectionFor method.

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

EDIT:

Here is an example of Handler factory. It allow you to create your handler

 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; }
        }
    }

Then, you have to register the factory in your web application (to allow IIS to find it). You can find more details here.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文