c# - 带有流式阅读器的 AutoFac SingleInstance
问题描述
我应该如何注册/配置容器,以便文件读取器不必为每个请求(实际上是证书)继续读取文件,证书在运行时不会改变
将服务注册到容器中
public static void AddMyService(this ContainerBuilder builder)
{
builder.Register(context =>
{
var configuration = context.Resolve<IConfiguration>();
var options = configuration.GetOptions<ServiceOptions>(SectionName);
return options;
}).SingleInstance();
builder.RegisterType<MyService>().As<IMyService>()
.InstancePerDependency();
}
服务实施
public CustomStuff DoCustomStuff(...)
{
...
using (var fileStream = File.OpenRead(_options.SomePath))
{
...
}
}
解决方案
这里有几个选项,但我个人只是创建一个新类来保存您正在阅读的数据,因为它使注册更加清晰。看起来您不需要保持文件流打开,您只需阅读一次就可以忘记它。
public class Certificate
{
public Certificate(string value)
{
Value = value;
}
public string Value { get; }
}
private static string ReadFile(ServiceOptions options)
{
return File.ReadAllText(options.SomePath);
}
然后您可以将其注册为单例并将其注入您的 MyService 实现:
builder.Register(context =>
{
var options = context.Resolve<ServiceOptions>();
var data = ReadFile(options);
return new Certificate(options.SomePath);
})
.As<Certificate>()
.SingleInstance();
推荐阅读
- reactjs - React Hooks 反转 useState 的语法 - 很奇怪
- c# - 等待取消任务的简洁方法?
- vue.js - 运行 npm run serve 时如何自动保存已编译的 vue 文件
- java - 绘制方法执行多次
- c - 如何通过C语言中的Dijkstra算法在无向图中查找和保存并行最短路径
- php - PHP - 将数组拆分为多个键匹配的数组
- visualization - Meshlab 增加点大小
- r - R中有没有办法通过指定另一个分组变量来减去组中的两行?
- java - 无法在静态工作流/块中使用 ExecutorService 执行任务
- python - 循环遍历列表以按行创建笛卡尔积 pandas