Unity 和 ASP.NET WebForms - 没有为此对象定义无参数构造函数

2023-11-27

有谁有关于如何使 Unity 1.2 或 2.0 与 ASP.NET WebForms 一起工作的好例子吗?

我以为我已经弄清楚了,但显然我错过了一些东西。现在我收到错误; “没有为此对象定义无参数构造函数”。我记得几年前遇到过这个错误,我只是不记得我做了什么。

显然,Unity 并没有像它应该的那样工作,因为在这个过程中我忘记了一些东西。任何帮助,将不胜感激。

这是我的一些代码:

全局.asax



using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.SessionState;

using Microsoft.Practices.Unity;

using PIA35.Unity;

namespace PIA35.Web
{
    public class Global : System.Web.HttpApplication
    {

        protected void Application_Start(object sender, EventArgs e)
        {
            IUnityContainer container = Application.GetContainer();
            PIA35.Web.IoC.Bootstrapper.Configure(container);
        }
    }
}
  

这是 web.config 文件的 httpModules 部分:



<httpModules>
    <add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
    <add name="UnityHttpModule" type="PIA35.Unity.UnityHttpModule, PIA35.Unity"/>
</httpModules>

  

这是我的 IoC 引导程序类的代码。



using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Microsoft.Practices.Unity;

using PIA35.Services.Interfaces;
using PIA35.Services;
using PIA35.DataObjects.Interfaces;
using PIA35.DataObjects.SqlServer;

namespace PIA35.Web.IoC
{
    public static class Bootstrapper
    {
        public static void Configure(IUnityContainer container)
        {
            container
                .RegisterType<ICategoryService, CategoryService>()
                .RegisterType<ICustomerService, CustomerService>()
                .RegisterType<IOrderService, OrderService>()
                .RegisterType<IOrderDetailService, OrderDetailService>()
                .RegisterType<IProductService, ProductService>()
                .RegisterType<ICategoryDao, SqlServerCategoryDao>()
                .RegisterType<ICustomerDao, SqlServerCustomerDao>()
                .RegisterType<IOrderDao, SqlServerOrderDao>()
                .RegisterType<IOrderDetailDao, SqlServerOrderDetailDao>()
                .RegisterType<IProductDao, SqlServerProductDao>();
        }
    }
}

  

这是 HttpApplicationStateExtensions.cs 文件。



using System.Web;

using Microsoft.Practices.Unity;

namespace PIA35.Unity
{
    public static class HttpApplicationStateExtensions
    {
        private const string GlobalContainerKey = "GlobalUnityContainerKey";

        public static IUnityContainer GetContainer(this HttpApplicationState application)
        {
            application.Lock();
            try
            {
                IUnityContainer container = application[GlobalContainerKey] as IUnityContainer;
                if (container == null)
                {
                    container = new UnityContainer();
                    application[GlobalContainerKey] = container;
                }
                return container;
            }
            finally
            {
                application.UnLock();
            }
        }
    }
}

  

这是我的 UnityHttpModule.cs 文件。



using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using Microsoft.Practices.Unity;

namespace PIA35.Unity
{
    public class UnityHttpModule : IHttpModule
    {
        #region IHttpModule Members

        ///
        ///Initializes a module and prepares it to handle requests.
        ///
        ///
        ///An  
        ///that provides access to the methods, properties, 
        ///and events common to all application objects within an ASP.NET application 
        public void Init(HttpApplication context)
        {
            context.PreRequestHandlerExecute += OnPreRequestHandlerExecute;
        }

        ///
        ///Disposes of the resources (other than memory) 
        ///used by the module that implements .
        ///
        ///
        public void Dispose()
        {
        }

        #endregion

        private void OnPreRequestHandlerExecute(object sender, EventArgs e)
        {
            IHttpHandler handler = HttpContext.Current.Handler;
            HttpContext.Current.Application.GetContainer().BuildUp(handler.GetType(), handler);

            // User Controls are ready to be built up after the page initialization is complete
            Page page = HttpContext.Current.Handler as Page;
            if (page != null)
            {
                page.InitComplete += OnPageInitComplete;
            }
        }

        // Get the controls in the page's control tree excluding the page itself
        private IEnumerable GetControlTree(Control root)
        {
            foreach (Control child in root.Controls)
            {
                yield return child;
                foreach (Control c in GetControlTree(child))
                {
                    yield return c;
                }
            }
        }

        // Build up each control in the page's control tree
        private void OnPageInitComplete(object sender, EventArgs e)
        {
            Page page = (Page)sender;
            IUnityContainer container = HttpContext.Current.Application.GetContainer();
            foreach (Control c in GetControlTree(page))
            {
                container.BuildUp(c.GetType(), c);
            }
        }
    }
}
  

这是我的一个服务类的示例。



namespace PIA35.Services
{
    public class CategoryService : ICategoryService
    {

        #region Dependency Injection

        private ICategoryDao categoryDao;

        public CategoryService(ICategoryDao CategoryDao)
        {
            this.categoryDao = CategoryDao;
        }

        #endregion


        #region ICategoryService Members

        public List GetAll()
        {
            return categoryDao.GetAll().ToList();
        }

        public Category GetById(int CategoryId)
        {
            return categoryDao.GetById(CategoryId);
        }

        public void Add(Category model)
        {
            categoryDao.Insert(model);
        }

        public void Update(Category model)
        {
            categoryDao.Update(model);
        }

        public void Delete(Category model)
        {
            categoryDao.Delete(model);
        }

        #endregion
    }
}
  

我看到它已经得到解答,但只是想指出您正在将所有对 GetContainer 的调用与您的锁定模式同步。对 Application.Lock() 的调用实际上会获取 applicationState 上的写锁,applicationState 是 Web 应用程序中的单例对象,如果您想扩展它,您将会看到问题。

为了解决这个问题,你可以做一个双重检查锁。像这样:

    public static IUnityContainer GetContainer(this HttpApplicationState application)
    {
        IUnityContainer container = application[GlobalContainerKey] as IUnityContainer;
        if (container == null)
        {
            application.Lock();
            try
            {
                container = application[GlobalContainerKey] as IUnityContainer;
                if (container == null)
                {
                    container = new UnityContainer();
                    application[GlobalContainerKey] = container;
                }
            }
            finally
            {
                application.UnLock();
            }
        }
        return container;
    }

我还想指出我们用来确保控件和页面建立其依赖关系的简洁模式。我们基本上有一个 Generic PageBase 和 Generic ControlBase,我们所有的页面和控件都继承自它们。我将仅以页面库为例:

public abstract class SitePageBase<T> : SitePageBase where T : SitePageBase<T>
{
    protected override void OnInit( EventArgs e )
    {
        BuildUpDerived();
        base.OnInit( e );
    }

    protected void BuildUpDerived()
    {
        ContainerProvider.Container.BuildUp( this as T );
    }
}

然后在我们的页面中,我们可以简单地从通用基础派生,它将负责构建。

public partial class Default : SitePageBase<Default>
{
        [Dependency]
        public IContentService ContentService { get; set; }

        protected override void OnPreRender( EventArgs e )
        {
            this.label.Text = ContentService.GetContent("labelText");
        }
     }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Unity 和 ASP.NET WebForms - 没有为此对象定义无参数构造函数 的相关文章

  • 切换图片框可见性 C#

    为什么图片框控件的可见性属性在这里不起作用 我最初将它们设置为 false 以便在屏幕加载时它们不可见 但后来我想切换这个 我已完成以下操作 但似乎不起作用 这是一个 Windows 窗体应用程序 private void Action w
  • 使用不带参数的 Split() 时,默认分隔符是什么?

    所以我看了看String Split 今天 C 中的方法 我意识到你也可以向它传递零参数 这是我从未考虑过的 使用时默认的分隔符是什么Split 没有任何参数 如果没有值 则为空白 来源自here https msdn microsoft
  • 为什么派生类不使用基类的operator=(赋值运算符)?

    以下是实际问题的简化版本 而不是打电话Base operator int 代码似乎生成了一个临时的Derived对象并复制它 既然函数签名似乎完美匹配 为什么不使用基本赋值运算符 这个简化的示例没有显示任何不良影响 但原始代码在析构函数中有
  • 获取 SignalR hub 内的完整 URL

    我正在使用 SignalR 开发一个用户跟踪解决方案 作为学习 SignalR 的有趣项目 用于 ASP NET MVC 应用程序 目前我可以跟踪登录的用户以及他们在特定页面上停留的时间 如果他们移动到另一个页面 我也会跟踪该页面 并且 S
  • 在运行时设置 DataGridView 上的 DataFormatString?

    是否可以在运行时设置 ASP NET DataGridView 中的列或单元格的 DataFormatString 属性 这应该有效 BoundField priceField grid Columns 0 as BoundField pr
  • 关闭 XDOCUMENT 的实例

    我收到这个错误 该进程无法访问文件 C test Person xml 因为它是 被另一个进程使用 IOException 未处理 保存文件内容后如何关闭 xml 文件的实例 using System using System Collec
  • 在 GCC 和 Clang 下,使用 lambda 的简单 RAII 包装器的复制初始化意外失败

    我在创建一个简单的 RAII 包装器时遇到了一个意想不到的问题 更不用说下面代码的逻辑不完整性了 复制构造函数和赋值运算符未删除等 这意味着是一个SSCCE 令我印象深刻的是复制初始化我的包装器与临时 lambda 的结果会导致编译错误 而
  • 抽象类或接口。哪种方式是正确的?

    有两种方法可以选择抽象类或接口 微软解决方案和Oracle解决方案 微软 设计指南 请使用抽象 在 Visual Basic 中为 MustInherit 类而不是接口来将协定与实现分离 http msdn microsoft com en
  • 指示泛型返回动态类型的对象

    这个问题是我原来问题的后续问题here https stackoverflow com questions 2541184 using a type object to create a generic 假设我有以下泛型类 简化 class
  • 线程安全的 C++ 堆栈

    我是 C 新手 正在编写一个多线程应用程序 不同的编写者将对象推入堆栈 读者将它们从堆栈中拉出 或至少将指针推入对象 C 中是否有任何内置结构可以在不添加锁定代码等的情况下处理此问题 如果没有 那么 Boost 库呢 EDIT 你好 感谢您
  • 数据损坏 C++ 和 Python 之间的管道

    我正在编写一些代码 从 Python 获取二进制数据 将其通过管道传输到 C 对数据进行一些处理 在本例中计算互信息度量 然后将结果通过管道传输回 Python 在测试时 我发现如果我发送的数据是一组尺寸小于 1500 X 1500 的 2
  • 更改其他页面的主窗口内容

    在 WPF 应用程序的主窗口中 我有一个 Badged 元素 来自材料设计 这是我的代码
  • 如何不在类中实现接口的功能?

    面试时面试官问了我以下问题 但我不知道这个问题的答案是什么 请帮忙 如果我不想 我必须做什么 在我的类中实现一个函数 在接口中声明为 由我班实施 Edited 我正在使用 NET 和 C 如果有人可以提供 C 示例代码示例 那就太好了 Th
  • 如何将字符串转换为 Indian Money 格式?

    我正在尝试将字符串转换为印度货币格式 例如如果输入为 1234567 则输出应为 12 34 567 我编写了以下代码 但它没有给出预期的输出 CultureInfo hindi new CultureInfo hi IN string t
  • 当在 Repository/UnitOrWork 之上使用 Service 类时,我应该在哪里放置逻辑不适合 Repository 的常用数据访问代码?

    In my 先前的问题 https stackoverflow com questions 24906548 using the generic repository unit of work pattern in large projec
  • Dynamics Crm:获取状态代码/状态代码映射的元数据

    在 Dynamics CRM 2011 中 在事件实体上 状态原因 选项集 也称为状态代码 与 状态 选项集 也称为状态代码 相关 例如看这个截图 当我使用 API 检索状态原因选项集时 如下所示 RetrieveAttributeRequ
  • C++ 标准中短语“构造函数没有名称”的含义

    在尝试理解 C 标准中的 构造函数没有名称 这句话时 我似乎在 clang 中发现了一个错误 有人可以证实这一点吗 VS2015 and gcc rejects this code and I think they it are is co
  • 微软语音识别速度

    我正在使用微软的语音识别器开发一个小型练习应用程序 对于我正在做的事情来说 我似乎无法让它足够快地识别单个单词 我希望能够正常说话 系统将从我所说的内容中抓取 关键字 并生成一个字符串 目前我正在使用 5 个单词的自定义语法 红 蓝 黄 绿
  • 创建带有部分的选项卡式侧边栏 WPF

    我正在尝试创建一个带有部分的选项卡式侧边栏 如 WPF 中的以下内容 我考虑过几种方法 但是有没有更简单 更优雅的方法呢 方法一 列表框 Using a ListBox并将 SelectedItem 绑定到右侧内容控件所绑定的值 为了区分标
  • 如何从函数返回矩阵(二维数组)? (C)

    我创建了一个生成宾果板的函数 我想返回宾果板 正如我没想到的那样 它不起作用 这是函数 int generateBoard int board N M i j fillNum Boolean exists True initilize se

随机推荐

  • Cakephp Sqlserver 编码

    这让我难住了 我正在尝试为我的 Sqlserver 连接设置编码 但我尝试的所有操作都失败了 我只得到 错误 使用 Sqlserver 的数据库连接丢失或无法连接 连接 数据库服务器返回此错误 SQLSTATE IMSSP 指定的编码无效
  • 使用 PHP 操作 MySQL 中的 utf8mb4 数据

    这大概是一件很简单的事情 我发誓我一直在网上寻找答案 但还没有找到 由于我的具体情况有点不典型 我最终决定在这里提问 我在 MySQL 中有一些表用于中文程序 它需要能够支持所有可能的汉字 包括没有很好字体支持的罕见汉字 表中的示例单元格可
  • 原始 C++ 指针是第一类对象吗?

    根据维基百科 当一个对象满足以下条件时 它就是一流的 可以存储在变量和数据结构中 可以作为参数传递给子例程 可以作为子例程的结果返回 可以在运行时构造 具有内在身份 独立于任何给定名称 有人曾经告诉我 原始指针不是第一类对象 而像 std
  • 如何在 C# 中获取运行 Windows 8 的计算机的唯一标识符?

    我正在开发一个用 C 编写的 Metro 应用程序 需要一种唯一标识设备的方法 我在文档中找到了 ASHWID 它看起来很棒 建议的代码如下 HardwareToken token HardwareIdentification GetPac
  • 将 @font-face 与 ABCPDF 一起使用?或者有其他方法将字体转换为 PDF 吗?

    我们有一个大型应用程序成功使用 ABCPDF NET 和 HTML 样式文本 我们习惯于使用 Windows 中未安装但存储在文件系统其他位置的文件中的字体添加文本 我们这样做是为了每个用户都可以上传自己的字体并将其与输出一起使用 我们使用
  • 即使设置了权限且外部存储处于 MEDIA_MOUNTED 状态,也无法写入 SD 卡

    在尝试将文件写入 SD 卡时 我得到java io FileNotFoundException filename Read only file system 例外 遗憾的是 这里发布的许多解决方案都没有帮助我 我已设置权限 外部存储处于 M
  • 如何以编程方式与应用程序交互

    我可能很快就会从事一些项目 在这些项目中 我需要从文件中获取数据并以编程方式将该数据输入到另一个第三方 不是我自己的 应用程序中 一个问题 我不知道如何做到这一点 我需要输入数据 例如时间表上的时间 任何人都可以引导我朝正确的方向发展以获取
  • 如何制作完美的方形图像/按钮

    我正在为 Android 设计一个基本的数独游戏 我想要一个 4x4 的表格 其中所有单元格都是正方形 我正在尝试使用 16 个按钮TableLayout 我的方式看起来像这样 它们的形状是矩形 my xml
  • 如果文件权限大于755,如何在Perl中检查?

    对于unix文件 我想知道Group或World是否对该文件有写权限 我一直在思考这些问题 my fpath orion properties my info stat fpath my retMode info gt mode retMo
  • 如何中断正在等待recv函数的线程? [复制]

    这个问题在这里已经有答案了 我有一个套接字侦听器 它挂在 recv 函数上 size t recvLen recv sock buf 512 0 我想通过中断来终止该线程 MSDN 说 发出阻塞 Winsock 调用时 比如recv Win
  • 根据key从多维数组中删除元素

    如何从给定键的多维数组中删除元素 我希望这是贪婪的 以便它删除数组中与我传入的键匹配的所有元素 到目前为止 我可以遍历多维数组 但我无法取消设置我需要的键因为我没有参考它 function traverseArray array keys
  • 从 Swift 中的“共享扩展”内部访问“UIApplication”的“共享”变量

    我需要从扩展内部执行我的主机应用程序 在Objective C我用过这个 Get UIApplication class name through ASCII Character codes NSString className NSStr
  • 如何在没有 mkl 的情况下安装 scipy

    现在我正在研究 Python 3 5 并尝试使用 Heroku 部署我的 Web 应用程序 当我尝试在线发布它时 Numpy mkl 与 Heroku 不兼容 它只能找到普通版本的 Numpy 所以我卸载 Numpy mkl 并安装普通的
  • grunt:可以为插件重新定位“node_modules”吗?

    如果我安装任何 grunt 插件 默认情况下它会添加到项目目录根目录中名为 node modules 的文件夹中 我的问题 是否可以将整个文件夹 以及所有插件 移动到另一个位置 但仍在我的项目文件夹中 比如说 build node modu
  • 使用 selenium 的 send_keys() 发送表情符号

    我想发送一个 heart 带有硒的表情符号send keys from selenium import webdriver from selenium webdriver support ui import WebDriverWait dr
  • Ruby on Rails:以表单形式提交数组

    我有一个模型 它的属性是数组 我从表单提交中填充该属性的正确方法是什么 我知道表单输入的名称包含括号的字段会根据输入创建哈希值 我是否应该在控制器中逐步执行它以将其按摩到数组中 使其不那么抽象的示例 class Article serial
  • 如何使用 Google 地图 API 获取本地业务结果

    是否有任何 google Yahoo Bing API 可以根据某个位置的邮政编码 地理代码提供本地业务结果 如果是 请告诉我 如果 Google 地图有此类服务 请告诉我在哪里可以获得相关参考信息 披露 我在 SerpApi 工作 是否有
  • 我应该采取哪些步骤来保护我的 Google 地图 API 密钥?

    我已为我的域获取了 Google 地图 API 密钥 我获取密钥时提供的示例显示了请求参数中嵌入的密钥 例如 我知道请求中的引荐来源网址字段必须与我的域匹配 使我的密钥在脚本标签等中可见是否安全 或者我还应该采取其他步骤吗 考虑到该密钥必须
  • javascript fizzbuzz switch 语句

    我目前正在参加关于 Javascript 的代码学院课程 并且我被 FizzBu zz 任务困住了 我需要从 1 到 20 数 如果这个数字可以被 3 print fizzbuzz 整除 可以被 5 print buzz 整除 可以被两个
  • Unity 和 ASP.NET WebForms - 没有为此对象定义无参数构造函数

    有谁有关于如何使 Unity 1 2 或 2 0 与 ASP NET WebForms 一起工作的好例子吗 我以为我已经弄清楚了 但显然我错过了一些东西 现在我收到错误 没有为此对象定义无参数构造函数 我记得几年前遇到过这个错误 我只是不记