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);然后再做相应的处理。数据库字符串用于什么?为什么不希望容器实现它?