Autofac最佳实践传递参数

时间:2014-05-09 08:37:56

标签: c# autofac

我没有长时间使用Autofac,我想知道哪个是注册参数的最佳方式:

  • 使用Register()方法,使用lamba表达式

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

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

第二种方式对我来说看起来更好,但我认为使用它非常危险,因为参数的名称可能会改变。

1 个答案:

答案 0 :(得分:1)

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

另一个选择是使用命名组件注册,如

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

Resolve Parameters文档

中了解有关该主题的更多信息

在任何情况下,最佳做法是通过单元测试覆盖所有注册,以避免意外结果。