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

che*_*xis 5 c# dependency-injection unity-container mongodb

我想使用DI与MongoDB的存储库类和接口,但它不起作用.我有这个错误:

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);
    }
Run Code Online (Sandbox Code Playgroud)

Unity配置:

container.RegisterType(typeof(MongoRepository.IRepository<>), typeof(MongoRepository.MongoRepository<>));
Run Code Online (Sandbox Code Playgroud)

如何在Unity中配置DI?谢谢!!

Ast*_*ain 7

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

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


Ste*_*ven 5

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

而是为框架类型注册工厂代理.然而,这不适用于您的情况,因为您正在处理泛型类型,但再次解决这个问题很简单:创建派生类型并注册:

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<>));
Run Code Online (Sandbox Code Playgroud)