C# Autofac传递参数的最佳实践
我已经很久没有使用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
- 使用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>();