gpt4 book ai didi

c# - StructureMap 不扫描当前文件夹中的程序集

转载 作者:行者123 更新时间:2023-11-30 18:15:16 25 4
gpt4 key购买 nike

所以我在 ASP.Net Core Web API 应用程序中遇到最新的 StructureMap (v4.6.1) 问题:

这是我的:

  • Web API 项目
  • 接口(interface)项目
  • 程序集 A(实现接口(interface)项目的接口(interface)子集)
  • 程序集 B(实现接口(interface)项目中定义的其余接口(interface))

程序集 A 使用标准约定来实现接口(interface),即接口(interface) ISomething 在名为 Something 的类中实现。

程序集 B 还实现了接口(interface)项目中定义的几个通用接口(interface)。在命名这些实现时没有使用特殊约定。

程序集 A 和程序集 B 都构建并部署在执行 Web API 项目的根文件夹中。 Web API 项目不引用任何底层程序集(接口(interface)、程序集 A 和程序集 B)。

在 Web API 项目 Startup.cs 中,我有以下内容:

public IServiceProvider ConfigureServices(IServiceCollection services)
{
services.AddMvc();
var container = new Container();
container.Configure(c =>
{
c.Scan(scanner =>
{
scanner.AssembliesFromApplicationBaseDirectory();
scanner.WithDefaultConventions();
});

c.Populate(services);
});
return container.GetInstance<IServiceProvider>();
}

当我检查已注册的程序集时,即使程序集在运行时存在,扫描器也不会拾取使用默认约定的具体类型。

我想实现的是:

  • 让扫描器扫描目录并使用标准约定绑定(bind)它知道如何绑定(bind)的类
  • 对于其余接口(interface)(尤其是不遵循任何特定约定的通用接口(interface))使用在定义具体类型的程序集中定义的注册表
  • 基本上,我想将我的底层架构视为执行环境的插件,即能够动态添加实现接口(interface)的程序集,并让 DI 容器通过使用默认约定或我在一个集会。

注意:我也尝试将 scanner.LookForRegistries() 添加到扫描器,但无济于事。

注意#2:还有其他程序集包含 API 引用的接口(interface),这些接口(interface)在其他程序集的其他地方实现。那些被扫描器拾取,但这些依赖项的依赖项没有被拾取。

最佳答案

我认为问题不在 Structuremap 中,而是因为这是 ASP.NET 应用程序并且并非所有程序集都在运行时立即加载我通过

解决了这个问题
 var referencedAssemblies =BuildManager.GetReferencedAssemblies().Cast<Assembly>().ToList();

此方法将返回所有程序集,然后您可以使用它们与 IoC 容器进行扫描!

关于c# - StructureMap 不扫描当前文件夹中的程序集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48660971/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com