C# 多个长度为2的构造函数。无法用统一来消除歧义
我想将DI与MongoDB的存储库类和接口一起使用,但它不起作用。我有一个错误: MongoRepository`1类型具有多个长度为2的构造函数。无法消除歧义 类构造函数:C# 多个长度为2的构造函数。无法用统一来消除歧义,c#,mongodb,dependency-injection,unity-container,C#,Mongodb,Dependency Injection,Unity Container,我想将DI与MongoDB的存储库类和接口一起使用,但它不起作用。我有一个错误: MongoRepository`1类型具有多个长度为2的构造函数。无法消除歧义 类构造函数: public MongoRepository(string connectionString, string collectionName) { this.collection = Util<TKey>.GetCollectionFromConnectionString<T
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);
}
public MongoRepository(string connectionString,string collectionName)
{
this.collection=Util.GetCollectionFromConnectionString(connectionString,collectionName);
}
公共MongoRepository(MongoUrl、字符串集合名称)
{
this.collection=Util.GetCollectionFromUrl(url,collectionName);
}
统一配置:
container.RegisterType(typeof(MongoRepository.IRepository<>), typeof(MongoRepository.MongoRepository<>));
container.RegisterType(typeof(MongoRepository.IRepository)、typeof(MongoRepository.MongoRepository));
如何在Unity中配置DI?谢谢 解决方案很简单:在处理框架类型时不要使用自动布线,如中所述 而是为框架类型注册工厂委托。但是,这在您的情况下不起作用,因为您正在处理泛型类型,但解决方法很简单:创建派生类型并注册:
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<>));
公共类MyMongoRepository:MongoRepository
{
//当然,您应该在这里填写真正的连接字符串。
public MyMongoRepository():base(“connectionString”,“name”){}
}
容器注册类型(typeof(IRepository),typeof(MyMongoRepository));
注意,您还可以告诉Unity它应该使用哪个构造函数:
//Use the MongoRepository(string, string) constructor:
container.RegisterType(
typeof(IRepository<>),
typeof(MyMongoRepository<>),
new InjectionConstructor(typeof(string), typeof(string)));
//使用MongoRepository(string,string)构造函数:
container.RegisterType(
类型(IRepository),
类型(MyMongoRepository),
新的注入构造函数(typeof(string),typeof(string));
为什么它能解决我的问题?container.RegisterType(新注入构造函数())@chemitaxis:它解决了您的问题,因为现在您有了一个泛型类型以及Unity知道如何调用的构造函数。你试过了吗?老实说,人们会因此而炒我鱿鱼的,真正的解决办法是停止使用Unity,使用一个像样的IoC容器,比如Autofac,它可以处理你想扔给它的任何东西。事实上,团结在每一个障碍上都会失败。这个解决方案对我有效,比公认的答案更简单