需要访问在同一HostBuilder()中配置的HostBuilder中的服务实例。

时间:2019-08-30 21:37:36

标签: dependency-injection .net-core

是否可以在HostBuilder()配置中访问DI配置的服务的实例?

这是我的意思:

return new HostBuilder()
    .UseOrleans((cntx, builder) =>
    {
        builder.ConfigureApplicationParts(parts =>
        {
            // This is where I want to access instance of IMyService
            // in order to help Orleans builder to configure Orleans properly
        }
    })
    .ConfigureServices(services =>
    {
        services.AddSingleton<IMyService, MyService>();
    })
    .RunConsoleAsync();

1 个答案:

答案 0 :(得分:2)

如果事实证明它是一个XY problem,而您正尝试创建一些启动任务,则有一个AddStartupTask扩展名

return new HostBuilder()
    .UseOrleans((cntx, builder) => {            
        //Add a startup task to be executed when the silo has started.
        builder.AddStartupTask((sp, token) => {
            // access instance of IMyService
            IMyService service = sp.GetRequiredService<IMyService>();

            //...use service as needed

            return Task.CompletedTask;
        });
    })
    .ConfigureServices(services => {
        services.AddSingleton<IMyService, MyService>();
    })
    .RunConsoleAsync();