所以我在ASP.Net Core Web API应用程序中遇到了最新的StructureMap(v4.6.1)的问题:
这就是我所拥有的:
程序集A使用标准约定来实现接口,即接口ISomething在名为Something的类中实现。
程序集B还实现了Interface项目中定义的几个通用接口。在命名这些实现时没有使用特殊约定。
程序集A和程序集B都是在Web API项目执行的根文件夹中构建和部署的。 Web API项目不引用任何底层程序集(接口,程序集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>();
}
当我检查已注册的程序集时,即使程序集在运行时存在,扫描程序也不会使用默认约定的具体类型。
我想要实现的目标如下:
注意:我也尝试将scanner.LookForRegistries()添加到扫描仪,但无济于事。
注意#2:还有其他程序集包含API引用的接口,这些接口在另一个程序集中的其他位置实现。这些是由扫描程序拾取的,但这些依赖项的依赖关系不是。
答案 0 :(得分:0)
我认为问题不在Structuremap中,但是因为这是ASP.NET应用程序而且并非所有程序集都在运行时立即加载我通过
解决了这个问题 var referencedAssemblies =BuildManager.GetReferencedAssemblies().Cast<Assembly>().ToList();
此方法将返回所有程序集,然后您可以使用它们使用IoC容器进行扫描!