2010-10-30 36 views
0

引用RegisterInstance我有以下代码:统一2故障使用InjectonProperty

统一容器:

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

我如何告诉团结注入的设置?这在接口上工作得很好,但不知道如何在这里继续。

任何帮助表示赞赏。

回答

0

它只是脱落的类型。你已注册设置类的实例,所以你只需要告诉它注入该类型:(请注意,您不需要额外的阵列,RegisterType采用可变参数列表)

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

由于这是一个常见的要求,因此您可以使用简写。首先,如果你正在解决的依赖,你只需要默认的(非命名)注册,你不需要使用ResovledParameter,你可以通过对象类型:

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

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

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

和容器会弄清楚。