【发布时间】:2019-12-03 18:12:09
【问题描述】:
使用 ASP.NET MVC Core,可以通过加载适当的 NuGet 包(Unity.Container 和 Unity.Microsoft.DependencyInjection)来使用 Unity DI 包,然后在构建 Web 主机时调用 UseUnityServiceProvider() 扩展方法Program.cs。此扩展方法基于IWebHostBuilder 接口。初始化主机后,可以通过 .NET Core GetService 接口和任何构造函数注入访问 Unity DI 功能。
我正在开发一个基于控制台的应用程序,它将使用HostBuilder 和IHostBuilder 接口。作为针对IHostBuilder 的ConfigureServices() 方法调用的一部分,我尝试从UseUnityServiceProvider() 扩展(可在此处获得:https://github.com/unitycontainer/microsoft-dependency-injection/blob/master/src/HostingExtension.cs)重新实现注册逻辑,但服务提供者的更改似乎对下游不可见DI 调用。
有没有人成功让 Unity 在使用 HostBuilder 创建的应用程序中使用 Microsoft DI 方法?
更新根据要求,这是我正在尝试的示例(取自 Unity 源)。当然,这是行不通的。 TestService 有一个构造函数,它应该被注入在MyUnityExtension 中定义的对象。这不会发生。
private static async Task MainTest()
{
var container = new UnityContainer().AddNewExtension<MyUnityExtension>();
var factory = new ServiceProviderFactory(container);
var hostBuilder = new HostBuilder()
.ConfigureServices((hostBuilderContext, services) =>
{
services.Replace(ServiceDescriptor.Singleton<IServiceProviderFactory<IUnityContainer>>(factory));
services.Replace(ServiceDescriptor.Singleton<IServiceProviderFactory<IServiceCollection>>(factory));
services.AddHostedService<TestService>();
});
await hostBuilder.RunConsoleAsync();
}
【问题讨论】:
-
如果您能分享minimal reproducible example 那就太好了,这样我们就可以更清楚地了解当前的问题以及您实际上想要做什么?
标签: dependency-injection .net-core unity-container