代码之家  ›  专栏  ›  技术社区  ›  Damien McGivern

如何用自动空调进行自定义初始化

  •  4
  • Damien McGivern  · 技术社区  · 14 年前

    我正在将autofac添加到现有的项目中,一些服务实现需要调用它们的初始化方法并传递配置信息。目前我正在使用代码:

    builder.Register(context =>
                     {
                        var service = 
                             new SqlTaxRateProvider(context.Resolve<IUserProvider>());
                        service.Initialize(config);
                        return service;
                     }
    ).As<ITaxService>()
    .SingleInstance();
    

    这是可行的,但我仍然在自己创建这个对象,这是我试图摆脱这个,让自动空调处理它为我。是否可以配置将执行自定义初始化的创建后操作?

    为了让你知道我在追求什么,理想情况下这就是代码:

    builder.RegisterType<SqlTaxRateProvider>()
     .As<ITaxService>()
     .OnCreated(service=> service.Initialize(config))
     .SingleInstance();
    

    更新: 我用的是autofac-2.1.10.754-net35

    1 回复  |  直到 6 年前
        1
  •  7
  •   Simon Randy Burden    10 年前
    .OnActivating(e => e.Instance.Initialize(...))
    

    应该有技巧。

    您还可以研究可启动模块(请参见 Startable entry in the Autofac wiki )。

    Mark建议在构造函数中进行初始化也是一个很好的建议。在这种情况下使用

    .WithParameter(new NamedParameter("config", config))
    

    将配置参数与其他构造函数依赖项合并。