[英]AutoFac SingleInstance with streamreader
我應該如何注冊/配置容器,以便文件讀取器不必為每個請求(實際上是證書)繼續讀取文件,證書在運行時不會更改
將服務注冊到容器中
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();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.