实例托管工厂


  在 配置节 -- ManagableConfigurationSection<T> 类 提到一个 IManagedFactory 接口类,负责创建一个实例对象。

  比如,我们为日志管理器建立一个实例委托工厂,创建一个 log4net 的日志实例。如下所示:

public class Log4netFactory : IManagedFactory
{
    object IManagedFactory.CreateInstance(IServiceProvider serviceProvider, string name)
    {
        return new Log4netLogger();
    }
}

public class Log4netLogger : ILogger
{
    private readonly ILog _logger;
        
    public Log4netLogger()
    {
        var repository = LogManager.GetAllRepositories().FirstOrDefault(s => s.Name == "fireasy") ?? LogManager.CreateRepository("fireasy");

        XmlConfigurator.Configure(repository, new FileInfo("log4net.config"));

        _logger =LogManager.GetLogger("fireasy", string.Empty);
    }
}

  配置文件中,不需要再指定配置项,而是指定 managed 属性即可。但一旦配置了实例委托工厂,所有的配置项将不再有效。如下所示:

  • .Net Framework 下的 app.config 或 web.config 文件
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <sectionGroup name="fireasy">
      <section name="loggings" type="Fireasy.Common.Logging.Configuration.LoggingConfigurationSectionHandler, Fireasy.Common"/>
    </sectionGroup>
  </configSections>
  <fireasy>
    <loggings managed="dmeo.Log4netFactory, demo">
    </loggings>
  </fireasy>
</configuration>
  • .Net Core 下的 appsettings.json 文件
{
  "fireasy": {
    "loggings": {
      "settings": {
        "managed": "dmeo.Log4netFactory, demo"
      }
    }
  }
}

  支持使用实例托管工厂的组件有:

  • 缓存管理器

  • 日志管理器

  • 序列化器

  • 订阅管理器

  • 本地化管理器

  • 任务调度管理器

  • 分布式锁

  • 对象映射器