3
我有一个通用的接口:StructureMap和泛型 - 如何指定默认构造函数?
public interface IRepository<T> { ... }
我有一个这样的实施方式:
public class Repository<T> {
public Repository<T>() { ... }
}
StructureMap(V 2.6.3)被配置是这样的:
For(typeof(IRepository<>)).Use(typeof(Repository<>));
当我尝试从StructureMap中抽取IRepository<Something>
,我按预期得到Repository<Something>
。 Hooray!
现在,我已经添加了第二个构造函数和实施看起来是这样的:
public class Repository<T> {
public Repository<T>() { ... }
public Repository<T>(string database) { ... }
}
当我尝试,并得到一个IRepository<Something>
现在,我得到一个例外,因为它默认为尝试使用新带参数的构造函数。 嘘!
我怎样才能改变我的StructureMap配置,以便它知道要使用参数的构造函数?
是啊,我发现,解决办法......不过,我不希望有改变我的库类,除非我真的要。将实现紧密结合到特定的IOC容器似乎很奇怪。 – NeilD
对于开放的泛型类型,没有办法做到这一点。作为讨厌的杂物,你可以使用CtorDependency来传递默认值,例如。x.For(typeof运算(IRepository <>))使用(typeof运算(存储库<>))CtorDependency( “数据库”)是(空);然后相应地处理它。什么是数据库字符串用于为什么你不想你的容器来实现它? –
非常有帮助,感谢罗布:) –