2015-08-27 136 views
0

我正在使用autofac IStartables加载配置,例如有没有办法自动解决并启动模块中可启动的autofac?

public class MyConfig : IMyConfig, IStartable 
{ 
    public string configValue { get; private set; } 

    public void Start() 
    { 
    configValue = ... // Load from config file 
    } 
} 

然后引导程序模块中,注册这样的:

builder.RegisterType<MyConfig>().As<IMyConfig>().As<IStartable>().SingleInstance(); 

使用autofac解决构造的配置时,这一切运作良好,但有时我想使用一些配置的引导程序模块本身的值。我设法得到它的工作使用:

var config = new MyConfig(); 
config.Start(); 
// now we can use config.configValue 

这2步初始化似乎但是不很干净 - 在那里有autofac这样做的更好的办法?

+0

我不明白究竟是什么问题。当你说“但有时我想在引导程序模块本身使用一些配置值”时,你是什么意思? –

+0

根据配置值,在引导程序模块中注册的实例需要有不同的行为,所以我需要使用模块中的配置值。 – danio

+2

你能给出一些你试图实现的例子吗(用一些代码)? –

回答

0

您无需致电Start()。当容器被构建时它将被自动调用。这是IStartable的整点。

http://docs.autofac.org/en/latest/lifetime/startup.html

+0

我不确定这是否会对您有帮助,正如他们在您发布的链接中所说:“首次启动将在容器建成时调用。”但是,我希望它可以在我的引导程序模块中使用,并且我认为autofac只在构造函数中使用它们时才构建容器。我将需要重新访问这个并创建一个示例应用程序,因为它很清楚我的描述不够清晰... – danio

相关问题