从数据库中读取 Autofac xml 配置并在运行时更改它
Read Autofac xml configuration from DB and change it runtime
我在搜索有关 autofac 的文档和示例时遇到问题,所以我在这里问这个问题:我需要在运行时更改 autofac 接受注入实现的 xml 配置。我曾想过这样的场景:维护并决定如何配置 Autofac 的数据库字段。所以我的问题是:是否可以将 xml 从数据库中读取的内容提供给 autofac?我可以在运行时以某种方式更改它吗?
大家干杯
您可以继承ConfigurationModule
并定义SectionHandler
属性。然后你可以注册你的自定义模块来加载你想要的配置。
public class DbConfigurationModule : ConfigurationModule
{
public DbConfigurationModule()
{
using(XmlReader reader = /*getReaderFromDb*/)
{
this.SectionHandler = SectionHandler.Deserialize(reader);
}
}
}
// Register your custom module
ContainerBuilder builder = new ContainerBuilder();
builder.RegisterModule(new DbConfigurationModule());
当您想要重新加载您的配置时,您将必须创建一个新的 IContainer
(您不能卸载模块)或在一个新的 ILifetimescope
中注册您的模块(不'已加载模块)
我在搜索有关 autofac 的文档和示例时遇到问题,所以我在这里问这个问题:我需要在运行时更改 autofac 接受注入实现的 xml 配置。我曾想过这样的场景:维护并决定如何配置 Autofac 的数据库字段。所以我的问题是:是否可以将 xml 从数据库中读取的内容提供给 autofac?我可以在运行时以某种方式更改它吗?
大家干杯
您可以继承ConfigurationModule
并定义SectionHandler
属性。然后你可以注册你的自定义模块来加载你想要的配置。
public class DbConfigurationModule : ConfigurationModule
{
public DbConfigurationModule()
{
using(XmlReader reader = /*getReaderFromDb*/)
{
this.SectionHandler = SectionHandler.Deserialize(reader);
}
}
}
// Register your custom module
ContainerBuilder builder = new ContainerBuilder();
builder.RegisterModule(new DbConfigurationModule());
当您想要重新加载您的配置时,您将必须创建一个新的 IContainer
(您不能卸载模块)或在一个新的 ILifetimescope
中注册您的模块(不'已加载模块)