Dependency injection 需要访问在同一HostBuilder()内配置的HostBuilder内的服务实例。ConfigureServices

Dependency injection 需要访问在同一HostBuilder()内配置的HostBuilder内的服务实例。ConfigureServices,dependency-injection,.net-core,Dependency Injection,.net Core,是否可以访问HostBuilder()configuration中DI配置服务的实例 我的意思是: return new HostBuilder() .UseOrleans((cntx, builder) => { builder.ConfigureApplicationParts(parts => { // This is where I want to access instance of IMyServic

是否可以访问
HostBuilder()
configuration中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();
返回新的HostBuilder()
.UseOrleans((cntx,建筑商)=>
{
builder.ConfigureApplicationParts(parts=>
{
//这就是我想要访问IMyService实例的地方
//为了帮助Orleans builder正确配置Orleans
}
})
.ConfigureServices(服务=>
{
services.AddSingleton();
})
.RunConsoleAsync();

如果这是一个,并且您正在尝试创建一些启动任务,那么有一个扩展

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();
返回新的HostBuilder()
.UseOrleans((cntx,builder)=>{
//添加要在思洛存储器启动时执行的启动任务。
builder.AddStartupTask((sp,令牌)=>{
//IMyService的访问实例
IMyService service=sp.GetRequiredService();
//…根据需要使用服务
返回Task.CompletedTask;
});
})
.ConfigureServices(服务=>{
services.AddSingleton();
})
.RunConsoleAsync();

@Nkosi我希望特定类型映射和实例化逻辑的接口位于单个位置,即在.ConfigureServices(…)内部,并在UseOrleans(…)内部由IMyService操作,如果这样做有意义的话,那么,您最终要实现的目标是什么,您需要访问该代理中的服务?如果有一些解决方法,您是否要创建一些启动任务?@Nkosi很抱歉没有提供足够的详细信息,我刚刚更新了我的问题。简言之,
IMyService
服务执行结果将有助于
builder
配置应用程序,但是我不能使用常规的Microsoft.Extensions.Configuration。在这里,我的服务除了返回配置数据外还执行一些操作,因此它不是常规的配置提供器在GitHub上查看了源代码之后,GitHub是唯一具有访问权限的托管扩展我在链接的答案中显示了访问服务提供商的延迟工厂代理的ss。到目前为止,我还没有找到任何其他访问点。很酷,很高兴了解此功能,非常有用,但是我想知道如何在任务之外但在构建器内部使用
IMyService
执行的结果?请参阅我的最新信息请不要对问题发表评论,并更新问题。谢谢!