如何解决将IServiceCollection扩展与DryIoc一起使用
IServiceCollection
有很多扩展名-在我的情况下,我使用AddHttpClient
。
我的情况是我在ConfigureServices
的{{1}}方法的Startup.cs
方法中注册常规内容,其中IServiceCollection
用于注册服务。仅在特定项目中需要的所有内容都在相应项目的扩展方法中注册,但是由于必须将DryIoc容器集成到ASP .NET Core项目中,因此使用DryIoc IContainer
。
现在,我有了一个HttpClient,仅在特定项目中才需要。因此,我想将其注册信息放入相应的项目中。问题是我想为其使用AddHttpClient,通常我只能将其与IServiceCollection一起使用。
我的问题:在我的其他项目中有没有办法使用它。也许可以从DryIoc容器或其他容器中获取它。
这是描述文件的一般结构:
Startup.cs
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services.RegisterSomeService();
// register other stuff
}
}
Program.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);
}
ContainerSetup.cs 在SomeProject中
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>();
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。