【问题标题】:Unity parameter constructor exceptionunity参数构造函数异常
【发布时间】:2013-11-15 00:10:52
【问题描述】:

在我的 WebApi 的引导程序类中,我试图根据其接口类型注册一个名为“Facade”的类的新实例。

在此类型中,它需要一个“CRUDOperator”的新实例,该实例在其构造函数中也有一个“Adaptor”的新实例。我正在尝试做的事情可能吗?我目前只是收到一个异常,即重载参数不正确。

 public static class Bootstrapper
{
    public static void Initialise()
    {
        var container = BuildUnityContainer();

        GlobalConfiguration.Configuration.DependencyResolver = new Unity.WebApi.UnityDependencyResolver(container);
    }

    private static IUnityContainer BuildUnityContainer()
    {
        var container = new UnityContainer();

        *****ERROR*****
        container.RegisterType<IFacade,Facade>(new CRUDOperatorSelector(new Adapter()));

        return container;
    }
}

【问题讨论】:

    标签: c# asp.net-web-api unity-container


    【解决方案1】:

    Unity 无需注册即可解析具体类型,因此如果在您的情况下,类型 CRUDOperatorSelector 和 Adapter 是具体类型(我假设它们是),您只需将类型 Facade 注册为 IFacade 的实现并解析它。 Unity 将创建每个依赖项的实例并将其传递给 Facade 的构造函数。 如果其中一些类型实现了抽象(接口或抽象类),也请注册它们。

    【讨论】:

    • 是的,你是对的,它们是具体的实现。所以它就像创建一个新的统一容器一样简单......注册如图所示的类型......container.RegisterType();......并且无需尝试注入任何东西进入这个注册类型?
    • 是的,应该就是这么简单;) 额外的问题是这些类型需要什么样的生命周期 - 默认情况下,每当统一需要解决它们时,您都会获得这些类型的新实例 -例如,如果有其他类型在它们的构造函数中接受 CRUDOperatorSelector 和 Adapter,它们中的每一个都会得到一个单独的新实例——我希望你知道我的意思;)
    • @Prezemek Walendowski。谢谢!就是这样,看来我要深入了!请你回答这个问题,以便我可以选择你的答案是正确的。
    • 你回答这个问题是什么意思? ;) 编辑前一个并添加带有注册的代码行? ;) 我在这里有点困惑:P
    • 现在全部排序。仍然不确定为什么有人反对我。不过谢谢你的回答
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-14
    • 1970-01-01
    • 2012-12-06
    • 1970-01-01
    • 2015-05-08
    • 2010-12-01
    相关资源
    最近更新 更多