c# - StructureMap 和泛型 - 如何指定默认构造函数?

标签 c# generics inversion-of-control structuremap

我有一个通用接口(interface):

public interface IRepository<T> { ... }

我有一个这样的实现:

public class Repository<T> {
    public Repository<T>() { ... }
}

StructureMap (v 2.6.3) 配置如下:

For(typeof(IRepository<>)).Use(typeof(Repository<>));

当我尝试拉出 IRepository<Something> 时从 StructureMap 中,我得到一个 Repository<Something>正如预期的那样。 万岁!

现在我添加了第二个构造函数,实现如下所示:

public class Repository<T> {
    public Repository<T>() { ... }
    public Repository<T>(string database) { ... }
} 

当我尝试获取 IRepository<Something> 时现在,我得到一个异常,因为它默认尝试使用带有参数的新构造函数。 嘘!

如何更改我的 StructureMap 配置,使其知道使用无参数构造函数?

最佳答案

您可以通过使用 [DefaultConstructor] 属性标记您希望 StructureMap 使用的构造函数来实现此目的。正如您在 StructureMap documentation 上看到的那样, 默认是贪心的。

关于c# - StructureMap 和泛型 - 如何指定默认构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10602386/

相关文章:

c# - 如何自动化测试中等信任代码

c# - UserControl 的构造函数

c# - 具有泛型的子项列表

java - 是否可以在 Spring 运行时 Autowiring 方法参数

C# 在 LINQ 中处理 System.UnauthorizedAccessException

c# - 静态覆盖/抽象方法 - 有什么好的解决方法吗?

asp.net - 将 IoC 依赖注入(inject)自定义 HTTP 模块 - 如何? (ASP.NET)

c++ - 通过构造函数进行依赖注入(inject)的最佳实践

Java 泛型 - 为什么它不输出变量?

generics - 如何判断 Rust 无法推断出哪种泛型类型?