0

如何使用构造函数中注入的另一个开放泛型和原语注册一个开放泛型类型?
请参见下面的示例。
在此示例中,Resolve 抛出“无法将字符串解析为参数“connectionString””异常。(您可以在此处查看实时代码)

using System;
using DryIoc;

public class Program
{
    public static void Main()
    {
        var container = new Container();

        container.RegisterInstance("some_connection_string", serviceKey: "connectionString");
        container.Register(typeof(Configuration<>), Reuse.Singleton);
        container.Register(typeof (IEntityUpdater<>), typeof (SqlEntityUpdater<>), Reuse.Singleton);

        var p = container.Resolve<IEntityUpdater<EventArgs>>();

        Console.WriteLine(p);
    }   
}

public class Configuration<T> where T : class { }


internal interface IEntityUpdater<in T> where T : class
{
    void Update(T entity);
}

internal class SqlEntityUpdater<T> : IEntityUpdater<T> where T : class
{
    public SqlEntityUpdater(Configuration<T> configuration, string connectionString)
    {
    }

    public void Update(T entity) { }
}
4

1 回答 1

1

首先,RegisterInstance被贬低,使用UseInstance.

其次,实际的问题是您serviceKey使用此密钥进行注入而在任何地方都注册了实例。

因此,您要么删除该serviceKey参数。

或者,在注入端指定密钥:

container.Register(typeof(IEntityUpdater<>), typeof(SqlEntityUpdater<>), Reuse.Singleton,
    made: Parameters.Of.Type<string>(serviceKey: "connectionString"));
于 2017-02-05T17:52:00.857 回答