【问题标题】:How do I wrap Hinging with a HingeProcess?如何用 HingeProcess 包裹 Hinging?
【发布时间】:2017-02-14 14:12:39
【问题描述】:

我错过了一些东西。我似乎注册正常,但我的决心因以下异常而崩溃。

{"Test.Interfaces.IProcess`1 类型是开放的泛型类型。无法解析开放的泛型类型。\r\n参数名称:t"}

如何用 HingeProcess 封装 Hinging,我认为 registerInstance 会处理这个问题?

public interface IProcess<T> where T : class
{
    Expression<Func<T, bool>> Expression { get; set; }
    T Entity { get; set; }
}

public class HingingProcess<T> : IProcess<T> where T : class
{
    public Expression<Func<T, bool>> Expression { get; set; }
    public T Entity { get; set; }

    public HingingProcess(T entity)
    {
        Entity = entity;
    }
}

container.RegisterType(typeof(IProcess<>), typeof(HingingProcess<>), "HingeProcess",
                   new InjectionConstructor(new GenericParameter("T", "entity")));
        Hinging a = new Hinging();
        container.RegisterInstance<Hinging>("entity", a);

var pp = container.Resolve(typeof(IProcess<>), "HingeProcess", new ParameterOverrides[] { });

认为这可能会起作用,但注册失败。

            container.RegisterType<object, Hinging>("hinge");

        container.RegisterType(typeof(IProcess<>), typeof(HingingProcess<>), "HingeProcess",
       new InjectionConstructor(new GenericParameter("entity", "hinge")));

【问题讨论】:

    标签: prism ioc-container


    【解决方案1】:

    解析时必须指定IProcess的类型

    var container = new UnityContainer();
    container.RegisterType(typeof(IProcess<>), typeof(HingingProcess<>), "HingeProcess",new InjectionConstructor(new GenericParameter("T", "entity")));
    Hinging a = new Hinging();         
    var pp = container.Resolve(typeof(IProcess<Hinging>), "HingeProcess", new ParameterOverride("entity", a));
    

    【讨论】:

      猜你喜欢
      • 2014-07-30
      • 1970-01-01
      • 1970-01-01
      • 2011-01-24
      • 1970-01-01
      • 2014-05-03
      • 2014-02-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多