长度为2的多个构造函数.无法与Unity消除歧义

本文关键字:Unity 歧义 构造函数 | 更新日期: 2023-09-27 18:19:54

我想将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配置:

container.RegisterType(typeof(MongoRepository.IRepository<>), typeof(MongoRepository.MongoRepository<>));

如何在Unity中配置DI?谢谢

长度为2的多个构造函数.无法与Unity消除歧义

注意,您还可以告诉Unity应该使用哪个构造函数:

//Use the MongoRepository(string, string) constructor:
container.RegisterType(
    typeof(IRepository<>), 
    typeof(MyMongoRepository<>),
    new InjectionConstructor(typeof(string), typeof(string)));

解决方案很简单:如本文所述,在处理框架类型时不要使用自动连接。

而是为框架类型注册一个工厂委托。然而,这在您的情况下不起作用,因为您处理的是泛型类型,但解决方法很简单:创建一个派生类型并注册:

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<>));