首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

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

您好!感谢您提供的问答内容。根据您的问题,我了解到您想了解有关 StructureMap 的自动注册泛型类型的信息。以下是我的回答:

StructureMap 是一个用于 .NET 应用程序的依赖注入(DI)容器。它可以自动扫描程序集并注册类型,以便在运行时自动解析依赖关系。在某些情况下,您可能希望根据某些条件自动注册泛型类型。

StructureMap 提供了一个名为 "扫描" 的功能,可以自动注册符合特定条件的类型。例如,您可以使用以下代码来扫描程序集并注册所有实现了特定接口的泛型类型:

代码语言:csharp
复制
var container = new Container(c =>
{
    c.Scan(scanner =>
    {
        scanner.AssemblyContainingType<MyType>();
        scanner.ConnectImplementationsToTypesClosing(typeof(IMyInterface<>));
    });
});

在这个示例中,StructureMap 将扫描包含 MyType 类型的程序集,并注册所有实现了 IMyInterface<T> 泛型接口的类型。这意味着,当您请求一个类型为 IMyInterface<T> 的实例时,StructureMap 将自动解析并返回相应的实现。

请注意,StructureMap 提供了许多其他选项和筛选器,可以帮助您根据需要自动注册泛型类型。您可以在 StructureMap 文档中了解有关 "扫描" 功能的更多信息:https://structuremap.github.io/registration/auto-registration-and-conventions/

希望这个回答能够解决您的问题。如果您有其他问题或需要进一步的解释,请随时告诉我!

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

类、方法、类型通配符的使用

类、方法、类型通配符的使用 一.类        类的声明和非类的声明类似,除了在类名后面添加了类型参数声明部分...和方法一样,类的类型参数声明部分也包含一个或多个类型参数,参数间用逗号隔开。一个参数,也被称为一个类型变量,是用于指定一个类型名称的标识符。...类型参数能被用来声明返回值类型,并且能作为方法得到的实际参数类型的占位符。 方法体的声明和其他方法一样。...下面的例子演示了"extends"如何使用在一般意义上的意思"extends"(类)或者"implements"(接口)。该例子中的方法返回三个可比较对象的最大值。...1、类型通配符一般是使用?

3.8K40

【C++】编程 ④ ( 函数模板 与 普通函数 调用规则 | 类型自动转换 | 类型自动转换 + 显式指定类型 )

; // 使用 template 关键字 声明函数模板 // 告诉 C++ 编译器 开始使用 编程 // 定义的 T 是类型 // 声明了多个, 可以只使用其中的部分类型 // 使用函数模板时...using namespace std; // 使用 template 关键字 声明函数模板 // 告诉 C++ 编译器 开始使用 编程 // 定义的 T 是类型 // 声明了多个...二、普通函数 与 函数模板 的调用规则 - 类型自动转换 + 显式指定类型 1、类型自动转换 + 显式指定类型 在上面示例的前提下 , 如果 传入参数 类型分别是 int 和 char , 并且强行指定...类型 , 这样必须使用函数模板 , 此时 函数模板 也可以进行 类型自动转换 ; int a = 10, b = 20; char x = 'A', y = 'B'; // 调用 函数模板...编程 // 定义的 T 是类型 // 声明了多个, 可以只使用其中的部分类型 // 使用函数模板时 , 显式类型调用 必须 显式指定所有 类型 的实际类型 template <typename

27750
  • 【Kotlin】 ③ ( out 协变 | in 逆变 | invariant 不变 | 逆变协变代码示例 | 使用 reified 关键字检查参数类型 )

    文章目录 一、 out 协变 二、 in 逆变 三、 invariant 不变 四、逆变协变代码示例 五、使用 reified 关键字检查参数类型 本章总结 : 使用 out...可以使 子类对象 赋值给 父类对象 ; 一、 out 协变 ---- 使用 out 关键字 , 可以使 子类对象 赋值给 父类对象 ; 在 类 中 , 如果只将 类型...作为 函数的返回值 类型 , 则在 声明 参数 类型 时 , 在 参数 前 使用 out 关键字 , 同时 该 类 又称为 生产类 ( 生产接口 ) , 用于生产 类 指定的对象...- 使用 in 关键字 , 可以使 父类对象 赋值给 子类对象 ; 在 类 中 , 如果只将 类型 作为 函数的参数 类型 , 则在 声明 参数 类型 时 , 在 参数 前...类型 作为 函数的返回值 类型 , 则在 声明 参数 类型 时 , 既不使用 in 关键字 , 又不使用 out 关键字 ; 代码示例 : 在下面的接口中 , 类型 即用于作为 返回值 ,

    1.7K10

    dotnet C# 使用 EqualityComparer 提升类型相等判断性能

    本文也叫跟着 Stephen Toub 大佬学性能优化系列,这是我从 Stephen Toub 大佬给 WPF 框架做性能优化学到的知识,通过 EqualityComparer 静态类的相等方法来优化值类型相等判断性能...在一些类型里面,需要进行值相等判断,此时默认就是使用 Equals 方法,如下面代码 public override bool Contains(T value) { return _loneEntry.Equals...(value); } 还请忽略上面代码的 _loneEntry 字段,但是以上的代码调用的 Equals 方法的参数是 object 类型,也就是调用 Equals 方法将会装箱。...可以继续使用判断,可以减少内存分配 public override bool Contains(T value) { return EqualityComparer.Default.Equals...本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。

    75620

    dotnet 非 类型 System.Collections.IEnumerable 不能与类型实参一起使用

    如果在开发的时候遇到非 类型“IEnumerable”不能与类型参数一起使用,那么就是变量的命名空间没弄对 在 dotnet 里面有 System.Collections.IEnumerable 和...System.Collections.Generic.IEnumerable 两个不同的类,带的需要在 System.Collections.Generic 命名空间找到 如果是写了 System.Collections.IEnumerable... 那么请修改代码里面的命名空间 System.Collections.Generic.IEnumerable 就可以通过编译 如果是使用 IEnumerable 提示 不能与类型实参一起使用...,那么只需要添加 using 就可以 using System.Collections.Generic; 除了 IEnumerable 对于 IEnumerator 也一样,如果遇到非 类型“System.Collections.IEnumerator...”不能与类型实参一起使用,那么看代码里面是通过 System.Collections.IEnumerator 还是 IEnumerator 可以选择添加命名空间还是修改

    96620

    使用通配符和:完成父子类关系的List对象的类型匹配

    和通配符 使用和通配符都可以让一个方法所表示的算法逻辑适应多种类型。...可以通过通配符或者方法实现。 通配符实现 使用List这样的形参,就可以接收集合项为Animal子类的任意List。...方法实现 抛开实际意义,假设需要findScaredAnimals()中,返回值和参数对应的具体Animal子类型是一致的,那么就需要用到了: public ...List findScaredAnimals(List animals, T who) { //... } 可以看到,类型参数T同时约束了多个地方。...参数也可以是多个的,而且之间存在关系。 小结 以上通过一个不太实际的案例说明了使用和通配符来解决List集合之间的“匹配”问题。这也是它们的主要用途之一。

    1.6K70

    使用通配符和:完成父子类关系的List对象的类型匹配

    和通配符 使用和通配符都可以让一个方法所表示的算法逻辑适应多种类型。...可以通过通配符或者方法实现。 通配符实现 使用List这样的形参,就可以接收集合项为Animal子类的任意List。...方法实现 抛开实际意义,假设需要findScaredAnimals()中,返回值和参数对应的具体Animal子类型是一致的,那么就需要用到了: public ...List findScaredAnimals(List animals, T who) { //... } 可以看到,类型参数T同时约束了多个地方。...参数也可以是多个的,而且之间存在关系。 小结 以上通过一个不太实际的案例说明了使用和通配符来解决List集合之间的“匹配”问题。这也是它们的主要用途之一。 (本文使用Atom编写)

    2.7K00

    生成代码,从 T 到 T1, T2, Tn —— 自动生成多个类型

    生成代码,从 T 到 T1, T2, Tn —— 自动生成多个类型 发布于 2018-01-31 05:38...更新于 2018-05-25 12:33 当你想写一个类型的时候,是否想过两个参数、三个参数、四个参数或更多参数的版本如何编写呢?...} 注意到类型变成了多个,参数从一个变成了多个,返回值从单个值变成了元组。 于是,怎么生成呢?...这货居然是从注册表拿的!也就是说,如果要在团队使用,还需要写一个注册表项!即便如此,自定义工具本身也是非常强悍的代码生成方式。...如果感兴趣优化优化,可以用正则表达式,或者使用 Roslyn 扩展直接拿语法树。 于是,在 Program.cs 中调用以上代码即可完成生成。

    1.4K20

    ASP.NET Core中GetService()和GetRequiredService()之间的区别

    比较GetService ()和GetRequiredService () 鉴于我们不再使用.NET 1.0,如果你想从IServiceProvider中检索服务,你可能使用了通用的GetService...) { return (T)provider.GetRequiredService(typeof(T)); } } 这两种方法实际上都是相同的 - 通用扩展方法委托给非版本的...非版本的GetService()是IServiceProvider接口的一部分,但非GetRequiredService()实现是同一类中的扩展方法: public static class ServiceProviderServiceExtensions...此接口提供底层的非GetRequiredService实现,因此如果服务提供者实现它,GetRequiredService()则可以直接调用。...StructureMap和其他一些第三方容器的一大好处是,它们能够提供详细的异常消息,说明为什么找不到服务。

    1.4K60

    ASP.NET Core中GetService()和GetRequiredService()之间的区别

    比较GetService ()和GetRequiredService () 鉴于我们不再使用.NET 1.0,如果你想从IServiceProvider中检索服务,你可能使用了通用的GetService...) { return (T)provider.GetRequiredService(typeof(T)); } } 这两种方法实际上都是相同的 - 通用扩展方法委托给非版本的...非版本的GetService()是IServiceProvider接口的一部分,但非GetRequiredService()实现是同一类中的扩展方法: public static class ServiceProviderServiceExtensions...此接口提供底层的非GetRequiredService实现,因此如果服务提供者实现它,GetRequiredService()则可以直接调用。...StructureMap和其他一些第三方容器的一大好处是,它们能够提供详细的异常消息,说明为什么找不到服务。

    1.7K20

    依赖注入容器Autofac

    在.NET上现在存在许多的依赖注入容器, 我也在实践中使用过Castle Windsor、StructureMap、Autofac 、Unity。...这些容器的简要介绍可以参看: IoC in .NET part 1: Autofac IoC in .NET part2: StructureMap IoC in .NET part 3: Ninject...Autofac的主要特性如下: 灵活的组件实例化:Autofac支持自动装配,给定的组件类型Autofac自动选择使用构造函数注入或者属性注入,Autofac还可以基于lambda表达式创建实例,这使得容器非常灵活...既是一个老孙手上的金箍棒,也是老孙头上的魔咒,有一种明确的方式告诉那一部分应该被清理,但是一个组件要何时处理并不是很容易确定的事情,比如说一个服务可以有多个实现的时候就变得很糟糕,组件的创建上(GOF的创建设计模式...自动装配:可以是用lambda表达式注册你的组件,autofac会根据需要选择构造函数或者属性注入 XML配置文件的支持:XML配置文件过度使用时很丑陋,但是在发布的时候通常非常有用 组件的多服务支持:

    1.2K90

    【C++】编程 ① ( 函数模板 | 函数模板概念 | 函数模板意义 | 函数模板定义语法 | 函数模板调用语法 | 显式类型调用 | 自动类型推导 )

    ; // 调用函数模板 // 函数模板 显式类型调用 int c = add(a, b); 如果 在 使用 template 关键字 声明 时 , 指定了多个 , 可以只使用其中的部分类型..., // 使用 template 关键字 // 告诉 C++ 编译器 开始使用 编程 // 定义的 T 是类型 // 声明了多个, 可以只使用其中的部分类型 // 使用函数模板时 ,...; 虽然只使用 T , 没有使用 X , 但是 在 显式类型调用时 , 必须指定所有的类型 ; int a = 10, b = 20; // 调用函数模板 // 函数模板 显式类型调用...int c = add(a, b); 自动类型 推导 : 该用法不常用 , 调用 函数模板 时 , 直接传入参数 , 不 显式声明 类型 , 让 C++ 编译器自动推导类型...+ 编译器 开始使用 编程 // 定义的 T 是类型 // 声明了多个, 可以只使用其中的部分类型 // 使用函数模板时 , 显式类型调用 必须 显式指定所有 类型 的实际类型 template

    20930

    一个简单的小程序演示Unity的三种依赖注入方式

    类型A中定义了3个属性B、C和D,其类型分别为接口IB、IC和ID。...然后调用它的的Resolve方法创建一个实现了接口IA的对象。最后将返回对象转变成类型A,并检验其B、C和D属性是否是空。...比如,在类型A中需要使用类型B的实例,而B实例的创建并不由A来负责,而是通过外部容器来创建。 有时我们又将IoC成为依赖注入(DI: Dependency Injection)。...,IoC容器会自动初始化该属性; 方法注入(Method Injection):如果被依赖对象需要调用某个方法进行相应的初始化,在该对象创建之后,IoC容器会自动调用该方法。...在开源社区,具有很有流行的IoC框架,比如Castle Windsor、Unity、Spring.NET、StructureMap、Ninject等。

    1.7K70

    Java5新特性及使用

    类、接口 类中的类型参数几乎可以用于任何可以使用接口名、类名的地方。...也就是说,如果使用方法可以取代将整个类化,那么就应该只使用方法,因为它可以使事情更清楚明白。...也就是说,成功编译过后的class文件中是不包含任何信息的。信息不会进入到运行时阶段。 要想在表达式中使用类型,需要显式地传递类型的class对象。...类型参数可以有多个。 所有类的类型参数在编译时都会被擦除。 创建对象时请指明类型,让编译器尽早的做参数检查。 不能创建数组。如果想要创建数组,建议使用ArrayList。...使用的类创建对象时,等式两边指定的必须一致。 的好处: 类型安全。 消除强制类型转换。 提高性能。

    1.3K30

    用户管理模块之用户注册

    User表 创建实体类 变量类型应该是使用包装类型,比如Integer 变量应该是驼峰式的,即不应该使用下划线 无参,全参构造方法 set,get方法 hashCode ,equals方法重写 实现序列化接口...null,如果为空,返回true,表示用户名不存在,那么可以使用这个用户名注册,如果不为null,返回false,那么不可以使用这个用户名注册 验证邮箱是否存在(异步Ajax) 持久层需要定义一个方法...,并且他先提交了,那么此时如果不检查,就会发生冲突了 在cn.tedu.store.bean包中新建ResponseResult 封装异步请求结果 其中的T是用来指定的,如果使用ResponseResult...> responseResult=new ResponseResult>();创建对象,那么这个T的就是List 如果不需要指定,那么可以使用...Void指定即可,那么就不能为data赋值了,因为你的指定了Void /** * 封装异步请求的返回的结果类型 * @author chenjiabing * @param

    5.6K50
    领券