当前位置:  开发笔记 > 编程语言 > 正文

StructureMap使用"扫描"自动注册泛型类型

如何解决《StructureMap使用"扫描"自动注册泛型类型》经验,为你挑选了2个好方法。

我有一个界面:

IRepository where T : IEntity

我正在使用一些虚假的存储库实现来破坏我的UI,只返回任何旧数据.

它们看起来像这样:

public class FakeClientRepository : IRepository

目前我这样做:

ForRequestedType>()
   .TheDefaultIsConcreteType();

但我所有的IEntities都有很多次.是否可以使用Scan自动注册我的所有虚假存储库以用于其各自的IRepository?

编辑:这是我得到的,但我得到错误说请求的类型没有注册:(

Scan(x =>
{
    x.TheCallingAssembly();
    x.IncludeNamespaceContainingType();
    x.AddAllTypesOf(typeof(IRepository<>));
    x.WithDefaultConventions();
});

谢谢

安德鲁



1> JD Courtoy..:

有一种更简单的方法可以做到这一点.有关详细信息,请参阅此博客文章:高级StructureMap:将实现连接到打开泛型类型

public class HandlerRegistry : Registry
{
    public HandlerRegistry()
    {
        Scan(cfg =>
        {
            cfg.TheCallingAssembly();
            cfg.IncludeNamespaceContainingType();
            cfg.ConnectImplementationsToTypesClosing(typeof(IRepository<>));
        });
    }
}

这样做可以避免必须创建自己的ITypeScanner或约定.



2> Andrew Bullo..:

由于克里斯,那正是我需要的.为清楚起见,这是我从你的链接做了什么:

Scan(x =>
{
    x.TheCallingAssembly();
        x.IncludeNamespaceContainingType();
    x.With(); 
});


private class FakeRepositoryScanner : ITypeScanner
{
    public void Process(Type type, PluginGraph graph)
    {
        Type interfaceType = type.FindInterfaceThatCloses(typeof(IRepository<>));
        if (interfaceType != null)
        {
            graph.AddType(interfaceType, type);
        }
    }
} 

推荐阅读
黄晓敏3023
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有