Unity 2使用InjectonProperty引用RegisterInstance时遇到问题

时间:2010-10-30 02:00:39

标签: asp.net asp.net-mvc asp.net-mvc-2 unity-container

我有以下代码:

Unity Container:

Settings settings = CreateSettings();

container.RegisterInstance(settings)
         .RegisterType<MyHttpHandler>(new InjectionProperty[]
             {
                 // How do I tell Unity to inject my settings created above?
                 new InjectionProperty("Settings", new ResolvedParameter(????))
             });

MyHttpHandler:

public class MyHttpHandler: IHttpHandler
{
    public MyHttpHandler()
    {
        IoC.Inject(this);
    }

    public Settings Settings
    {
        get;
        set;
    }
}

如何告诉Unity注入设置?这适用于接口,但不知道如何继续。

感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

它只是类型。您已经为Settings类注册了一个实例,因此您只需要告诉它注入该类型:

container.RegisterInstance(settings)
    .RegisterType<MyHttpHandler>(
        new InjectionProperty("Settings", new ResolvedParameter<Settings>());

(注意,您不需要额外的数组,RegisterType采用可变参数列表。)

由于这是一个常见的要求,因此您可以使用短缺。首先,如果您正在解析依赖项而您只需要默认(非命名)注册,则不需要使用ResovledParameter,您只需传递类型对象:

container.RegisterType(settings)
    .RegisterType<MyHttpHandler>(
        new InjectionProperty("Settings", typeof(Settings));

但是,我们也可以比这更简单。如果您使用基于类型的属性的默认值,则根本不需要传递值 - 容器将只使用属性的类型。所以你可以说:

container.RegisterType(settings)
    .RegisterType<MyHttpHandler>(
        new InjectionProperty("Settings"));

并且容器会弄明白。