使用注入的原语

时间:2017-02-04 23:47:40

标签: dryioc

如何在构造函数中注入另一个开放泛型和原语注册Open Generic类型?
请参阅下面的示例。
在此示例中,Resolve抛出“无法将String解析为参数”connectionString “”例外。 (您可以查看实时代码here

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) { }
}

1 个答案:

答案 0 :(得分:1)

首先,RegisterInstance已被停用,请使用UseInstance

其次,实际问题是您使用serviceKey注册实例,并且无法使用此密钥进行注入。

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

或者,在注射侧指定键:

container.Register(typeof(IEntityUpdater<>), typeof(SqlEntityUpdater<>), Reuse.Singleton,
    made: Parameters.Of.Type<string>(serviceKey: "connectionString"));