【问题标题】:Define Default constructor Structuremap in a Generic Repository在通用存储库中定义默认构造函数 Structuremap
【发布时间】:2011-02-15 02:01:33
【问题描述】:

我有一个通用的 IRepository,它有 2 个构造函数,一个没有参数,另一个有 datacontext 作为参数。 在这种情况下,我想将结构映射定义为使用无参数构造函数。 我想要一种创建无参数构造函数的方法,我见过的其他解决方案,它们创建一个新的 Datacontext 并将其传递给具有参数的构造函数。

【问题讨论】:

  • 这对您有帮助吗? stackoverflow.com/questions/289512/…
  • 不是因为我使用的是通用存储库!我需要做这样的事情:x.SelectConstructor(IRepository.......
  • 这没有意义。接口没有构造函数。
  • 对不起我的错误:它应该是这样的: x.SelectConstructor>(()=> new Repository());但这不起作用...有什么办法可以使它起作用?
  • 为什么要无参数构造函数? DI 的全部意义在于容器将在您的构造函数上提供接口参数的具体实现。

标签: asp.net-mvc generics dependency-injection structuremap ioc-container


【解决方案1】:

默认情况下,StructureMap 将使用具有最多参数的构造函数。在您的情况下,由于您希望它使用无参数构造函数,请使用 DefaultConstructorAttribute:

[DefaultConstructor]
public void Repository<T>() { }

public void Repository<T>(DataContext dataContext) { } 

【讨论】:

  • 是否可以通过其他方式做到这一点?看起来,如果没有访问/希望向您的类添加属性,您就无法为开放的泛型类型指定默认构造函数,因为您无法用它们制定构造函数表达式。
  • 您也可以将 StructureMap 配置为显式调用其他构造函数。如果我不能修改有问题的类,那就是我会采取的方法。
  • 但是您实际上不能调用开放泛型的构造函数,例如BaseClass 等,因为您无法编译不满足这些参数的表达式。
猜你喜欢
  • 2010-09-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-30
  • 1970-01-01
相关资源
最近更新 更多