C# Autofac传递参数的最佳实践

C# Autofac传递参数的最佳实践,c#,autofac,C#,Autofac,我已经很久没有使用Autofac了,我想知道哪种方法是注册参数的最佳方法: 使用Register()方法,使用lamba表达式 builder.Register(a => new SomeClass(config)) .As<ISomeClass>(); builder.Register(a=>newsomeclass(config)) .As(); 使用RegisterType()方法和WithParameter() builder.RegisterTyp

我已经很久没有使用Autofac了,我想知道哪种方法是注册参数的最佳方法:

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

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

    builder.RegisterType()
    .WithParameter(新名称参数(“配置”,配置))
    .As();
    

第二种方法在我看来更好,但我想使用它是相当危险的,因为参数的名称可能会更改。

使用更适合您需要的方法。如果你不需要太多的灵活性,那么使用第一种方法。但是一旦
SomeClass
依赖项增加,您可能需要使用更灵活的方法,如
NamedParameter

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

builder.RegisterInstance(config).Named<Config>("DefaultConfig");
builder.Register((c, p) => new SomeClass(p.Named<Config>("DefaultConfig")))
       .As<ISomeClass>();
builder.RegisterInstance(config).Named(“DefaultConfig”);
builder.Register((c,p)=>newsomeclass(p.Named(“DefaultConfig”))
.As();
从文档中阅读更多关于这些主题的信息

无论如何,最佳实践是通过单元测试覆盖所有注册,以避免意外结果

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