StructureMap DI不注册nuget包中的实现



在过去两天的大部分时间里,我一直在努力理解这个问题,似乎当使用一个nuget包,该包使用带有
StructureMap注册表的.net核心包时,注册表中的东西永远不会进入应用程序的容器。这是nuget包的代码:

public class SomeRegistry : Registry
{
public SomeRegistry()
{
this.For<ILogger>().Use<Logger>();
}
}

这里是注册表的启动查找:

public virtual void ConfigureContainer(Registry registry)
{

registry.Scan(
c =>
{
c.AssembliesFromApplicationBaseDirectory();
c.LookForRegistries();
});
//this is just for testing 
var con = new Container(registry);
con.GetInstance<SomeDLL.ILogger>();//this will fail with "No default Instance is registered and cannot be automatically determined for type" 
}

我使用.net核心traget框架2.1

structureMap.AspNetCore 1.4.0

视觉工作室2017

感谢的帮助

很好地解决了问题,似乎

c.AssembliesFromApplicationBaseDirectory();

只扫描应用程序文件夹(顾名思义(,但在.net核心上扫描nuget包不会复制到应用程序文件夹(它们从缓存文件夹加载到内存(

解决方案是让我们自己组装,并将它们加载到组装扫描仪中,如下所示:

var assemblies = AppDomain.CurrentDomain.GetAssemblies().Where(assembly => assembly.GetTypes()
.Any(t => t != typeof(Registry) && typeof(Registry).IsAssignableFrom(t))).ToList();
registry.Scan(
c =>
{
assemblies.ForEach(a => c.Assembly(a));
c.LookForRegistries();
});

最新更新