我想将DI与MongoDB的Repository Class和Interface一起使用,但它不起作用。我有这个错误:
MongoRepository`1类型有多个长度为2的构造函数。无法消除歧义。
班级建设者:
public MongoRepository(string connectionString, string collectionName)
{
this.collection = Util<TKey>.GetCollectionFromConnectionString<T>(connectionString, collectionName);
}
public MongoRepository(MongoUrl url, string collectionName)
{
this.collection = Util<TKey>.GetCollectionFromUrl<T>(url, collectionName);
}
Unity Config:
container.RegisterType(typeof(MongoRepository.IRepository<>), typeof(MongoRepository.MongoRepository<>));
如何在Unity中配置DI?谢谢!
答案 0 :(得分:7)
请注意,您也可以告诉Unity它应该使用哪个构造函数:
//Use the MongoRepository(string, string) constructor:
container.RegisterType(
typeof(IRepository<>),
typeof(MyMongoRepository<>),
new InjectionConstructor(typeof(string), typeof(string)));
答案 1 :(得分:5)
解决方案很简单:在处理框架类型时不要使用自动布线,如this article中所述。
而是为框架类型注册工厂委托。但是,由于您正在处理泛型类型,因此这不适用于您的情况,但是再次解决这个问题很简单:创建派生类型并注册:
public class MyMongoRepository<T> : MongoRepository<T>
{
// of course you should fill in the real connection string here.
public MyMongoRepository() : base("connectionString", "name") { }
}
container.RegisterType(typeof(IRepository<>), typeof(MyMongoRepository<>));