有没有更好的方法来编码配置的依赖关系,如何注册由另一个注册对象的属性提供的对象?
我有一个配置对象,它公开每个服务的配置属性。我想基于它们的配置对象接口初始化这些服务。
void RegisterConfiguration(ContainerBuilder builder)
{
var config = new Configuration();
builder.RegisterInstance(config).As<IConfiguration>();
builder.RegisterInstance(config.Service1Configuration).As<IService1Configuration>();
builder.RegisterInstance(config.Service2Configuration).As<IService2Configuration>();
}
注意:我还想包含“.ExternallyOwned()”,但在此省略,因为这不是问题的一部分。
然后对于每个ServiceX,我有以下构造函数:
public Service1(IService1Configuration config)
{
this.config = config;
}
我希望能够简单地注册配置并让Autofac以某种方式为我实例化配置。
我在想服务注册的工厂,但我不确定是否可以解决工厂中的配置对象。
我有什么想法可以让它不那么明确并且使用更多的Autofac?
答案 0 :(得分:0)
Register
方法的第一个参数是IComponentContext
。这意味着您可以使用它来解决某些依赖项。
示例:
void RegisterConfiguration(ContainerBuilder builder)
{
builder.RegisterType<Configuration>()
.As<IConfiguration>()
.SingleInstance();
builder.Register(c => c.Resolve<Iconfiguration>()
.Service1Configuration)
.As<IService1Configuration>();
builder.Register(c => c.Resolve<IConfiguration>()
.Service2Configuration)
.As<IService2Configuration>();
}