答案是不正确的(但在ASP.NET应用程序),由提供
@Nkosi
UseServiceProviderFactory
这就是解决办法,所以谢谢你们。
使用
我必须自己实现一个类,并将适当的nuget包引用添加到我的项目中。
-
添加对的引用
DryIoc.dll
(毫不奇怪)
-
添加对的引用
DryIoc.Microsoft.DependencyInjection
-
更改注册码
-
使用ServiceProviderFactory
原始代码如下所示:
var builder = new HostBuilder()
.ConfigureAppConfiguration((hostingContext, config) => { ... })
.ConfigureServices((hostContext, services) =>
{
services.AddOptions();
// configure services
})
.ConfigureLogging((hostingContext, logging) => { ... });
var builder = new HostBuilder()
.ConfigureAppConfiguration((hostingContext, config) => { ... })
.ConfigureServices((hostContext, services) =>
{
services.AddOptions();
// configure services
})
//////////////////// ADD THIS vvvvvvvv
.UseServiceProviderFactory(new DryIocServiceProviderFactory())
.ConfigureContainer<Container>((hostContext, container) =>
{
container.Register<...>();
})
//////////////////// ADD THIS ^^^^^^^^
.ConfigureLogging((hostingContext, logging) => { ... });
然后提供
DryIocServiceProviderFactory
:
internal class DryIocServiceProviderFactory : IServiceProviderFactory<IContainer>
{
public IContainer CreateBuilder(IServiceCollection services)
=> new Container().WithDependencyInjectionAdapter(services);
public IServiceProvider CreateServiceProvider(IContainer containerBuilder)
=> containerBuilder.ConfigureServiceProvider<CompositionRoot>();
}
CompositionRoot
上面的类在配置期间解析,构造函数可用于配置容器。不能使用不执行任何操作的伪类。