![](/img/trans.png)
[英]Use HostBuilder.ConfigureServices with DryIoc container?
[英]Use IServiceCollection extensions with DryIoc
IServiceCollection
有很多擴展 - 在我的例子中,我使用AddHttpClient
。
我的場景是我在Startup.cs
的ConfigureServices
方法中注冊一般的東西,其中IServiceCollection
用於注冊服務。 僅在特定項目中需要的所有內容都在相應項目的擴展方法中注冊,但由於 DryIoc 容器必須集成到 ASP .NET 核心項目中,因此使用了 DryIoc IContainer
。
現在我有一個只在特定項目中需要的 HttpClient。 因此,我想將它的注冊放在相應的項目中。 問題是我想為它使用通常只能與 IServiceCollection 一起使用的 AddHttpClient。
我的問題:有沒有辦法在我的其他項目中使用它。 也許通過從 DryIoc 容器或其他東西中獲取它。
這是所描述文件的一般結構:
啟動.cs
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services.RegisterSomeService();
// register other stuff
}
}
程序.cs
public class Startup
{
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
})
.UseServiceProviderFactory(new DryIocServiceProviderFactory())
.ConfigureContainer<Container>(SomeProject.ContainerSetup.Initialize);
}
SomeProject 中的ContainerSetup.cs
public static class ContainerSetup
{
public static void Initialize(HostBuilderContext hostContext, IContainer container)
{
container.Register<SomeService>();
// register other stuff
// here I want to use AddHttpClient
}
}
我建議查看 AddHttpClient https://source.dot.net/#Microsoft.Extensions.Http/DependencyInjection/HttpClientFactoryServiceCollectionExtensions.cs,72bc67c4aadb77fc
並且可能使用IContainer
而不是服務集合進行相同的注冊。
另一個想法是將IServiceCollection
注冊到自身中(或者它可能已經自動注冊了?),然后從 IContainer 和 AddHttpClient 中解析它。
我能夠通過使用屬於DryIoc.Microsoft.DependencyInjection的IContainer
擴展Populate
來解決問題。
有了它,我按如下方式編輯了我的 ContainerSetup.cs
public static class ContainerSetup
{
public static void Initialize(HostBuilderContext hostContext, IContainer container)
{
var services = new ServiceCollection();
services.AddHttpClient<MyTypedClient>()
.Configure[...];
container.Populate(services); // with this call all services registered above will be registered in the container
// register other stuff if necessary
container.Register<SomeService>();
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.