从其他已注册类型的属性注册实例?

时间:2018-02-19 15:28:00

标签: c# dependency-injection autofac

有没有更好的方法来编码配置的依赖关系,如何注册由另一个注册对象的属性提供的对象?

我有一个配置对象,它公开每个服务的配置属性。我想基于它们的配置对象接口初始化这些服务。

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?

1 个答案:

答案 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>();
}