繁体   English   中英

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

[英]StructureMap not finding generic Types when used with scan.TheCallingAssembly

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

public class IocRegistry : Registry
{
    public IocRegistry()
    {
        Scan(
            scan =>
            {
                scan.TheCallingAssembly(); // Scan this assembly
                scan.WithDefaultConventions();
                scan.AddAllTypesOf(typeof(IMapper<,>));
            });
    }
}

如果我使用“ WhatDidIScan”方法,则可以看到配置:

IocRegistry扫描仪#1程序集

  • Mmu.Ddws.Application,版本= 1.0.0.0,文化=中性,PublicKeyToken =空

约定

  • 默认的I [名称] / [名称]注册约定
  • 查找并注册实现Mmu.Ddws.Application.Common.Mapping.IMapper`2的所有类型

但是,一旦我尝试获取此类Mapper的实例,就会收到找不到它的错误。

足够有趣的是,如果我要通过以下方法在WebServices-Assembly上注册接口(这是起点):

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;
    }
}

我得到完全一样的约定:

约定

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

然而,这种方式有效。 我在应用程序组装中拥有接口和实现,因此围绕不同组装中的接口进行的大多数讨论似乎都不适合这里。 因此,我最好的选择是,扫描调用方的程序集是不对的,但是我找不到关于此的任何评论?

有关详细信息和使用开放通用类型进行类型扫描的示例,请参见此内容: http : //structuremap.github.io/generics/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM