1

我有现有代码使用 System.Configuration.Provider 命名空间作为提供程序集合来插入接口的各种实现,其中集合中存在多个实现并根据各种逻辑按名称选择。

此命名空间在 .net 核心中不可用,因此我正在寻找有关如何实施可与 .net 核心框架一起使用的替代解决方案的建议。

我知道如果我只是想插入一个实现,我可以通过依赖注入来做到这一点。但我正在寻找一种方法来根据名称选择多种实现。

我当前使用提供程序模型的实现从一个文件夹中填充提供程序集合,您可以在该文件夹中放入声明实际实现类型的 xml 文件,因此只需将另一个文件添加到文件夹中,就可以从程序集中加载提供程序的新实现。我想保持逻辑尽可能相似,但我对 json 文件而不是 xml 持开放态度。

我在想我可以从 Startup 中的 json 文件加载接口的实现集合,并使用依赖注入在需要的地方提供集合,或者可以获取集合的接口可能会更轻,并允许在需要时获取它们而不是在启动时。

这是正确的方法吗?有人有更好的想法或做过类似的事情吗?

4

1 回答 1

0

ProviderBase这比在新框架中使用抽象基类更通用。您可以使用 DI 框架注册多个相同的服务,并通过请求IEnumerable<>您注册它们的类型或使用GetRequiredServices<>扩展方法来获取它们。但是,一旦您获得了服务,您将需要一些其他方式来区分它们,例如一个指示唯一名称的属性,这是 ASP.Net 团队一直遵循的模式。

您可以在 Identity framework v3 中看到一个带有 Token Providers 的示例。

于 2015-06-02T02:29:01.320 回答