实例托管工厂
在 配置节 -- 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"
}
}
}
}
支持使用实例托管工厂的组件有:
缓存管理器
日志管理器
序列化器
订阅管理器
本地化管理器
任务调度管理器
分布式锁
对象映射器