c# - 在 .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。
解决方案
您应该使用将 Unity 与 .NET Core 提供的 ServiceProvider 集成在一起的 NugetPackage。 https://github.com/unitycontainer/microsoft-dependency-injection
推荐阅读
- c++ - 通过引用 lambda 传递weak_ptr
- c# - 外观对象如何通知其内容在 WPF 中已更改
- asp.net-mvc - asp.net mvc:多个视图模型默认值
- json - AWS 创建策略 MalformedPolicyDocument
- react-native - React Native 中的内向曲线
- c++ - 使用 snmpSET 和 netsnmp lib 无法设置请求
- flutter - 如何解决“操作系统错误:文件存在,errno = 17”?
- mysql - 将 SQL Server 的触发器转换为 MySQL
- python - 在 macOS Big Sur 上运行 simple_3dviz 脚本得到modernGL错误
- sql-server - 保持数据库结构同步