C# 与scan.TheCallingAssembly一起使用时,StructureMap找不到泛型类型

C# 与scan.TheCallingAssembly一起使用时,StructureMap找不到泛型类型,c#,.net,structuremap,C#,.net,Structuremap,我有一个应用程序集,其中包含大量的通用IMapper接口。每个实现都有上述类型和两种方法来映射每个方向上的对象。 使用AutoMapper,我继续使用他们的文档,并在所述应用程序集中创建了一个IocRegistry类,该类应注册所有类型: public class IocRegistry : Registry { public IocRegistry() { Scan( scan => {

我有一个应用程序集,其中包含大量的通用IMapper接口。每个实现都有上述类型和两种方法来映射每个方向上的对象。 使用AutoMapper,我继续使用他们的文档,并在所述应用程序集中创建了一个IocRegistry类,该类应注册所有类型:

public class IocRegistry : Registry
{
    public IocRegistry()
    {
        Scan(
            scan =>
            {
                scan.TheCallingAssembly(); // Scan this assembly
                scan.WithDefaultConventions();
                scan.AddAllTypesOf(typeof(IMapper<,>));
            });
    }
}
公共类IocRegistry:注册表
{
公共图书馆()
{
扫描(
扫描=>
{
scan.TheCallingAssembly();//扫描此程序集
scan.WithDefaultConventions();
scan.AddAllTypesOf(typeof(IMapper));
});
}
}
如果我使用“WhatDiscan”方法,我可以看到配置:

IocRegistry扫描仪#1组件
  • Mmu.Ddws.Application,版本=1.0.0.0,区域性=neutral,PublicKeyToken=null
习俗
  • 默认I[Name]/[Name]注册约定
  • 查找并注册实现Mmu.Ddws.Application.Common.Mapping.IMapper`2的所有类型
然而,当我试图获得这样一个映射器的实例时,我得到了一个错误,它没有找到它

有趣的是,如果我正在我的WebServices程序集上注册接口,这是一个起点,通过:

internal static class IocInitialization
{
    internal static IServiceProvider InitializeIoc(IServiceCollection services)
    {
        var container = new Container();

        container.Configure(
            config =>
            {
                config.Scan(
                    scan =>
                    {
                        scan.AssembliesFromApplicationBaseDirectory();
                        scan.LookForRegistries();
                        scan.WithDefaultConventions();
                        scan.AddAllTypesOf(typeof(IMapper<,>));
                    });

                config.Populate(services);
            });

        Debug.WriteLine(container.WhatDidIScan());
        var result = container.GetInstance<IServiceProvider>();
        return result;
    }
}
内部静态类IOC初始化
{
内部静态IServiceProvider初始化IOC(IServiceCollection服务)
{
var container=新容器();
容器。配置(
配置=>
{
配置扫描(
扫描=>
{
scan.AssembliesFromApplicationBaseDirectory();
scan.LookForRegistries();
scan.WithDefaultConventions();
scan.AddAllTypesOf(typeof(IMapper));
});
config.Populate(服务);
});
Debug.WriteLine(container.whatdiscan());
var result=container.GetInstance();
返回结果;
}
}
我得到了完全相同的约定:

习俗
  • StructureMap.Graph.FindRegistriesCanner
  • 默认I[Name]/[Name]注册约定
  • 查找并注册实现Mmu.Ddws.Application.Common.Mapping.IMapper`2的所有类型

然而,它是这样工作的。我在应用程序集中有接口和实现,因此,关于不同程序集中接口的大多数讨论似乎不适合这里。因此,我的最佳选择是,扫描调用程序集有点错误,但我找不到任何关于这一点的注释?

有关详细信息,请参阅此以及使用打开泛型类型扫描类型的示例:

有关详细信息,请参阅此以及使用打开泛型类型扫描类型的示例:

不确定我是否误解了您的意思,但是扫描通常是有效的,如果我使用applicationbasedirectory或callingassembly中的assemblies,似乎会有所不同。另外,两者的扫描输出是相同的,所以这不是配置原因,不是吗?不确定我是否误解了您的意思,但扫描通常都能正常工作,如果我使用ApplicationBaseDirectory或CallingAssembly中的Assemblies,这似乎是不同的。而且两者的扫描输出是相同的,所以这不是配置原因,不是吗?我真的很惊讶这没有答案yetI我真的很惊讶这还没有答案