2014-05-09 58 views
0

我一直没有使用Autofac长,我想知道这是注册参数的最佳方式:Autofac最佳实践传递参数

  • 使用寄存器()方法,以表达兰巴

    builder.Register(a => new SomeClass(config)) 
         .As<ISomeClass>(); 
    
  • 使用RegisterType()方法和WithParameter()

    builder.RegisterType<SomeClass>() 
          .WithParameter(new NamedParameter("config", config)) 
          .As<ISomeClass>(); 
    

第二种方式对我来说看起来更好,但我猜这是非常危险的,因为参数的名称可以改变。

回答

1

使用更适合您需求的方式。如果你不需要太多的灵活性,那就用第一种方法。但只要SomeClass依赖关系增长,您可能需要使用更灵活的方法,如NamedParameter

使用命名组件注册像

builder.RegisterInstance(config).Named<Config>("DefaultConfig"); 
builder.Register((c, p) => new SomeClass(p.Named<Config>("DefaultConfig"))) 
     .As<ISomeClass>(); 

了解更多关于这些话题从Resolve Parameters文档

在任何情况下,最好的做法是,以覆盖所有的注册的单元测试作为一个选项可用以避免意想不到的结果。