【发布时间】:2021-12-28 07:10:19
【问题描述】:
我以前用过其他的DI框架,现在我必须使用微软的(.NET Core 3.0),并且在使用服务时我需要调用一个InitializeAsync方法(它是一个单例所以我只有一个整个应用程序中的实例)。我不想在 Constructor 中执行这样的操作,因为它必须调用 web api ,我也不想在服务实现的方法中放入变量并检查它是否刚刚初始化。
可以考虑下面sn-p的代码
class Program
{
static void Main(string[] args)
{
using IHost host = CreateHostBuilder(args).Build();
ExemplifyScoping(host.Services, 1);
ExemplifyScoping(host.Services, 88);
host.RunAsync();
}
private static void ExemplifyScoping(IServiceProvider hostServices, int scope)
{
var service = hostServices.GetService<IDummyService>();
var str = service.PerfomSomething(scope);
Console.WriteLine($"RES : {str}");
}
static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureServices((_, services) =>
{
services.AddTransient<IDummyService, DummyService>();
}
);
}
和简化的服务类
public class DummyService : IDummyService
{
private IDictionary<int, string> _dictionary;
public Task InitializeAsync()
{
_dictionary = new Dictionary<int, string>();
_dictionary.Add(1,"1");
_dictionary.Add(2,"2");
_dictionary.Add(3,"3");
_dictionary.Add(4,"4");
return Task.CompletedTask;
}
public string PerfomSomething(int id)
{
if (_dictionary.ContainsKey(id))
return _dictionary[id];
return string.Empty;
}
}
public interface IDummyService
{
Task InitializeAsync();
string PerfomSomething(int id);
}
我看到DI框架有一个PostConfigure方法但是不知道是不是我需要用的。
有什么建议吗? 谢谢
【问题讨论】:
标签: c# .net-core dependency-injection