统一引导程序之间的区别

时间:2015-04-02 20:44:08

标签: asp.net-mvc asp.net-web-api webforms unity-container

他们之间有什么区别:

  1. Unity.AspNet.WebApi
  2. Unity.WebForms
  3. Microsoft.Practices.Unity.WebApi
  4. 我需要,即1& 2如果我想在带有WebAPI的webforms应用程序中使用DI?

    为什么不使用Microsoft.Practices.Unity,这个lib不足以在各种场景下实现D吗?

    修改 为什么Unity.WebForms构建控制树,如果你只想为你的IRepository安排DI?

     private void OnPageInitComplete(object sender, EventArgs e)
            {
                foreach (Control controlTree in UnityHttpModule.GetControlTree((Page)sender))
                {
                    string fullName = controlTree.GetType().FullName ?? string.Empty;
                    string str = (controlTree.GetType().BaseType != null ? controlTree.GetType().BaseType.FullName : string.Empty);
                    if (!this.Prefixes.All<string>((string p) => !fullName.StartsWith(p)) || !this.Prefixes.All<string>((string p) => !str.StartsWith(p)))
                    {
                        continue;
                    }
                    UnityContainerExtensions.BuildUp(this.ChildContainer, controlTree.GetType(), controlTree, new ResolverOverride[0]);
                }
            }
    

1 个答案:

答案 0 :(得分:1)

我只能说Unity.WebForms,因为这是我写的,我还没有时间看其他人。它们之间的差异很可能围绕每个框架提供的拦截点。 MVC提供了IDependencyResolver接口,允许您挂钩对象创建过程。这应该与WebAPI非常相似(因为它与MVC共享大量代码),但我最近没有能力使用WebAPI。

与MVC不同,WebForms在对象创建时没有拦截点,因此我们不能进行构造函数注入(首选)。我们所能做的最好的就是在执行之前将属性注入转移到您的页面。为此,我们遍历控制树,查找具有[Dependency]属性的控件(使用Unity的Buildup方法)。最新版本的Unity.WebForms允许您指定在执行DI时要忽略的命名空间(默认忽略System.*),这样您可以在走控制树时限制其范围(在使用第三方控件时非常有用)像Telerik这样的图书馆。

如果要在同一个项目中使用WebForms和WebAPI,您可能希望从源代码中自定义它们,以确保您使用的是Unity容器的相同实例。 Unity.WebForms将容器的父实例放在Application缓存中,每个请求都将它自己的子容器添加到Request items集合中。

希望有所帮助。