首页 > 解决方案 > 在 .NET Core 依赖注入中访问 Unity 特定的功能

问题描述

我有一个 .net core 2.1 控制台应用程序。我正在构建容器如下:

public IServiceProvider ConfigureServices()
{
    var services = new ServiceCollection();

    // Register services here.

    // Unity container interface:
    var containerFactory = new ServiceProviderFactory(null);
    IUnityContainer container = containerFactory.CreateBuilder(services);
    IServiceProvider serviceProvider = containerFactory.CreateServiceProvider(container);

    return serviceProvider;
}

我需要为容器中注册的一些服务提供构造函数参数。但是,我不想使用options pattern之类的东西。相反,我想通过以下方式访问 Unity 功能:

var container = (UnityContainer)serviceProvider;
var foo = container.Resolve<IFoo>(new ParameterOverrides<Foo> { "name": "myFoo" });

上述方法不起作用并抛出错误:

Unable to cast object of type 'Unity.Microsoft.DependencyInjection.ServiceProvider' to type 'Unity.UnityContainer'.

有没有办法做到这一点,或者IServiceProvider即使我使用 Unity 实现,我也仅限于接口?

编辑:

所以,我找不到像演员这样的东西IServiceProvider来切换的方法。IUnityContainer因此,我稍微更改了上面的代码以返回 Unity 容器:

public IServiceProvider ConfigureServices()
{
    var services = new ServiceCollection();

    // Register services here.

    // Unity container interface:
    var containerFactory = new ServiceProviderFactory(null);
    IUnityContainer container = containerFactory.CreateBuilder(services);

    return container;
}

现在,我可以在 .Net Core App 中使用常用的 Unity DI。

标签: c#dependency-injection.net-coreunity-container

解决方案


您应该使用将 Unity 与 .NET Core 提供的 ServiceProvider 集成在一起的 NugetPackage。 https://github.com/unitycontainer/microsoft-dependency-injection


推荐阅读