你可能想通过一个字符串或者其他的类型来获取一个具体的服务实现,那么在 aspnetcore 原生的 MSDI 中,如何实现呢?本文将介绍如何通过自定义工厂来实现。

我们现在恰好有基于 Json 和 MessagePack 的两种序列化器

有一个接口是这样的


(资料图片)

Bilibili 代码块无法正常渲染,因此无法正常显示。请关注微信公众号“newbe技术专栏”,搜索对应文章代码内容。

并且由两个不同的实现

Bilibili 代码块无法正常渲染,因此无法正常显示。请关注微信公众号“newbe技术专栏”,搜索对应文章代码内容。

我有一个服务,需要使用这两种序列化器中的一种。

Bilibili 代码块无法正常渲染,因此无法正常显示。请关注微信公众号“newbe技术专栏”,搜索对应文章代码内容。

使用委托来定义获取服务的方法

我们可以通过委托来定义获取服务的方法,如下

Bilibili 代码块无法正常渲染,因此无法正常显示。请关注微信公众号“newbe技术专栏”,搜索对应文章代码内容。

然后在 ConfigureServices方法中注册

Bilibili 代码块无法正常渲染,因此无法正常显示。请关注微信公众号“newbe技术专栏”,搜索对应文章代码内容。

这样我们就可以在 MyService中通过委托来获取服务了

Bilibili 代码块无法正常渲染,因此无法正常显示。请关注微信公众号“newbe技术专栏”,搜索对应文章代码内容。

基于配置来改变工厂

因为本质是通过委托来获取服务,所以我们可以通过配置来改变委托的行为,如下

Bilibili 代码块无法正常渲染,因此无法正常显示。请关注微信公众号“newbe技术专栏”,搜索对应文章代码内容。

然后在 appsettings.json中配置

Bilibili 代码块无法正常渲染,因此无法正常显示。请关注微信公众号“newbe技术专栏”,搜索对应文章代码内容。

然后在 ConfigureServices方法中注册

Bilibili 代码块无法正常渲染,因此无法正常显示。请关注微信公众号“newbe技术专栏”,搜索对应文章代码内容。

总结

本篇文章介绍了如何通过自定义工厂来实现基于 key 的服务获取,这种方式在 aspnetcore 原生的 DI 中是原生支持的。

参考

Dependency injection guidelines1

感谢您的阅读,如果您觉得本文有用,快长按右下角大拇指为本文点赞~

欢迎关注作者的微信公众号“newbe技术专栏”,获取更多技术内容。

本文作者: newbe36524

本文链接: https://www.newbe.pro/Others/0x023-aspnetcore-natively-implements-key-based-service-resolving/

版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!

https://learn.microsoft.com/en-us/dotnet/core/extensions/dependency-injection-guidelines?WT.mc_id=DX-MVP-5003606↩

标签: 无法正常 是这样的 许可协议

免责声明:市场有风险,选择需谨慎!此文仅供参考,不作买卖依据。