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

C# StructureMap和泛型-如何指定默认构造函数?,c#,generics,inversion-of-control,structuremap,C#,Generics,Inversion Of Control,Structuremap,我有一个通用接口: public interface IRepository<T> { ... } 公共接口i假定{…} 我有这样一个实现: public class Repository<T> { public Repository<T>() { ... } } public class Repository<T> { public Repository<T>() { ... } public Repos

我有一个通用接口:

public interface IRepository<T> { ... }
公共接口i假定{…}
我有这样一个实现:

public class Repository<T> {
    public Repository<T>() { ... }
}
public class Repository<T> {
    public Repository<T>() { ... }
    public Repository<T>(string database) { ... }
} 
公共类存储库{
公共存储库(){…}
}
StructureMap(V2.6.3)的配置如下:

For(typeof(IRepository<>)).Use(typeof(Repository<>));
For(typeof(IRepository))。使用(typeof(Repository));
当我尝试从StructureMap中拉出一个
IRepository
时,我得到了一个
存储库
<万岁

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

public class Repository<T> {
    public Repository<T>() { ... }
}
public class Repository<T> {
    public Repository<T>() { ... }
    public Repository<T>(string database) { ... }
} 
公共类存储库{
公共存储库(){…}
公共存储库(字符串数据库){…}
} 
当我现在尝试获取一个
IRepository
时,我得到了一个异常,因为它默认尝试使用带有参数的新构造函数Boo


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

可以通过将StructureMap要使用的构造函数标记为[DefaultConstructor]属性来实现这一点。正如您在上看到的,默认情况下它是贪婪的。

是的,我找到了解决方案。。。然而,我不想改变我的存储库类,除非我真的必须这样做。必须将实现与特定的IOC容器紧密耦合似乎很奇怪。对于开放泛型类型,没有办法做到这一点。作为一个令人讨厌的难题,您可以使用ctorrependency传入默认值,例如x.For(typeof(IRepository)).Use(typeof(Repository)).ctorrependency(“数据库”).Is(null);然后再做相应的处理。数据库字符串用于什么?为什么不希望容器实现它?