ASP.NET MVC2 错误:没有为此对象定义无参数构造函数

2024-03-10

编辑:这是固定的 - 请参阅下面的解决方案

Solution:首先,我错误地将节点定义在 /shared/web.config 中,而不是 WebUI 项目根目录中的 web.config 中。我也没有在 web.config 中正确定义我的连接字符串。我已经粘贴了下面正确的 web.config 部分:

<configuration>
  <configSections>
    <section name="castle" type="Castle.Windsor.Configuration.AppDomain.CastleSectionHandler, Castle.Windsor"/>
  <!--more sectiongroup and sections redacted for brevity -->
  </configSections>
  <castle>
      <components>
          <component id="ProdsRepository" service="DomainModel.Abstract.IProductsRepository, DomainModel" type="DomainModel.Concrete.SqlProductsRepository, DomainModel">
              <parameters>
                  <connectionString>Data Source=.\SQLExpress;Initial Catalog=SportsStore; Integrated Security=SSPI</connectionString>
              </parameters>
          </component>
      </components>
  </castle>

我还必须调整 WindsorControllerFactory.cs(IoC 容器)的方法主体,以针对无效请求返回 null,如下所示:

protected override IController GetControllerInstance(RequestContext requestContext, Type controllerType)
{
    if (controllerType == null)
        return null;
    else
    return (IController)container.Resolve(controllerType);
}

解决方案结束

我正在关注 Sanderson 的《Pro ASP.NET MVC2》一书。我已经实现了 IoC 容器并理顺了 web.config。当我尝试运行我的应用程序时,出现错误“没有为此对象定义无参数构造函数”

经过一番搜索后,我在 SO 上发现了这个确切的问题here https://stackoverflow.com/questions/1355464/asp-net-mvc-no-parameterless-constructor-defined-for-this-object。解决方案是创建不带参数的构造函数,但我在执行此操作时遇到问题。我粘贴了下面 ProductsController.cs 中的代码

namespace WebUI.Controllers
    {
        public class ProductsController : Controller
           {
               private IProductsRepository productsRepository;
               public ProductsController(IProductsRepository productsRepository)
               {
                   this.productsRepository = productsRepository;
               }

        public ViewResult List()
        {
            return View(productsRepository.Products.ToList());
        }
    }
}

在具有我尝试执行的参数的公共 ProductsController 之上:

public ProductsRepository() : this(new productsRepository())
{
}

我不清楚“新”之后到底需要做什么。 IProductsRepository 似乎不起作用,我写的也不起作用。我已经粘贴了下面的堆栈跟踪:

Stack Trace: 


[MissingMethodException: No parameterless constructor defined for this object.]
   System.RuntimeTypeHandle.CreateInstance(RuntimeType type, Boolean publicOnly, Boolean noCheck, Boolean& canBeCached, RuntimeMethodHandle& ctor, Boolean& bNeedSecurityCheck) +0
   System.RuntimeType.CreateInstanceSlow(Boolean publicOnly, Boolean fillCache) +86
   System.RuntimeType.CreateInstanceImpl(Boolean publicOnly, Boolean skipVisibilityChecks, Boolean fillCache) +230
   System.Activator.CreateInstance(Type type, Boolean nonPublic) +67
   System.Web.Mvc.DefaultControllerFactory.GetControllerInstance(RequestContext requestContext, Type controllerType) +80

[InvalidOperationException: An error occurred when trying to create a controller of type 'WebUI.Controllers.ProductsController'. Make sure that the controller has a parameterless public constructor.]
   System.Web.Mvc.DefaultControllerFactory.GetControllerInstance(RequestContext requestContext, Type controllerType) +190
   System.Web.Mvc.DefaultControllerFactory.CreateController(RequestContext requestContext, String controllerName) +68
   System.Web.Mvc.MvcHandler.ProcessRequestInit(HttpContextBase httpContext, IController& controller, IControllerFactory& factory) +118
   System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContextBase httpContext, AsyncCallback callback, Object state) +46
   System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContext httpContext, AsyncCallback callback, Object state) +63
   System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.BeginProcessRequest(HttpContext context, AsyncCallback cb, Object extraData) +13
   System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +8682818
   System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +155

任何帮助将不胜感激。

编辑:发布 WindsorControllerFactory.cs 代码:

namespace WebUI
{
    public class WindsorControllerFactory : DefaultControllerFactory
    {
        WindsorContainer container;

        // The contructor:
        // 1. Sets up a new IoC container
        // 2. Registers all components specified in web.config
        // 3. Registers all controller types as components
        public WindsorControllerFactory()
        {
            // Instantiate a container, taking config from web.config
            container = new WindsorContainer(new XmlInterpreter(new ConfigResource("castle")));

            // Also register all the controller types as transient
            var controllerTypes = from t in Assembly.GetExecutingAssembly().GetTypes()
                                  where typeof(IController).IsAssignableFrom(t)
                                  select t;
            foreach (Type t in controllerTypes)
                container.AddComponentLifeStyle(t.FullName, t, Castle.Core.LifestyleType.Transient);
        }

        // Constructs the controller instance needed to service each request
        protected override IController  GetControllerInstance(RequestContext requestContext, Type controllerType)
        {
            return (IController)container.Resolve(controllerType);
        }

    }
}

Edit2:相关的Web.config节点:

<configSections>
    <section name="castle"
             type="Castle.Windsor.Configuration.AppDomain.CastleSectionHandler,
                 Castle.Windsor" />
  </configSections>
  <castle>
    <components>
      <component id="ProdsRepository"
                 service="DomainModel.Abstract.IproductsRepository, DomainModel"
                 type="DomainModel.Concrete.SqlProductsRepository, DomainModel"></component>
      <parameters>
      </parameters>
    </components>
  </castle>

您需要配置自定义控制器工厂才能在内部连接 ​​DI 框架Application_Startglobal.asax 中的方法。例如,如果您使用 Unity 作为 DI 框架,您可以:

ControllerBuilder.Current.SetControllerFactory(
    typeof(UnityControllerFactory)
);

查看这篇博文 http://weblogs.asp.net/shijuvarghese/archive/2010/05/07/dependency-injection-in-asp-net-mvc-nerddinner-app-using-unity-2-0.aspx了解更多信息。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ASP.NET MVC2 错误:没有为此对象定义无参数构造函数 的相关文章

  • 如何从我的 iPad 访问本地 IIS 服务器上的 asp.net MVC 网站(用于测试)?

    我正在使用 Visual Studio 2010 构建一个应用程序 我可以从我的计算机运行我的 asp net 网站 按 F5 我想在我的 iPad 上运行这个网站以进行测试 我已经禁用了防火墙和防病毒软件 但这没有帮助 我的电脑的IP地址
  • 检查Web服务是否存在

    有人可以告诉我确定给定 URL 是否存在 Web 服务 ASP NET 的最佳方法吗 我假设一种方法类似于使用 System Net Webclient 发出请求 但我如何确定它是否是有效的 Web 服务以及我应该发出哪种类型的请求 编辑
  • asp.NET 2.0网站无法访问App_Code中的类

    将我的网站部署到服务器后 我在访问课程时遇到问题 请注意 这是一个网络Site不是网络应用 错误是 编译器错误消息 CS0246 找不到类型或命名空间名称 Order 是否缺少 using 指令或程序集引用 版本信息 Microsoft N
  • HTTP 403 Forbidden:访问被拒绝 ASP.NET Web API

    在生产服务器上运行 ASP NET Web API 项目时 我收到以下错误 403 禁止 访问被拒绝 您没有权限查看 使用您提供的凭据访问此目录或页面 查看 IIS 7 0 错误日志 基本错误是 403 14 目录列表被拒绝 我已经配置了生
  • HTML Agility 包删除了中断标记 close

    我正在使用 HTML 敏捷包创建 HTML 文档 我加载一个模板文件 然后将内容附加到其中 所有这些都有效 但是当我查看输出文件时 它已从我的文件中删除了结束标记 br 标签看起来像这样 br 是什么原因造成的 Dim doc As New
  • ASP.NET 中继器错误:找不到类型 xx 的默认成员

    这是我的 aspx 页面中的中继器控件
  • 自动 IIS6 403.4 重定向到 SSL 不起作用

    我的 ASP Net 网站中有一个目录需要启用 SSL 对于所有其他目录 我不希望启用 SSL 使用 IIS 我为我想要需要 SSL 的文件夹选中了 需要安全通道 SS 和 128 位加密复选框 现在 当用户在我的安全目录中输入 http
  • 如何在 NUnit 测试中使用 Selenium 获取 javascript 日志?

    我正在尝试使用 Selenium ChromeDriver 从 Visual Studio 上的 NUnit 测试中检索 Javascript 控制台日志 但我在日志上得到空值 我已经尝试了下面的代码 但它会在 driver Manage
  • 如何缓存 ASP.NET 网站以获得更好的性能

    我是一名网页设计师 通常设计不需要更新的企业网站 所以我想将输出缓存一天 我怎样才能做到这一点 此外 任何有关在慢速服务器上提高 ASP NET 性能的建议都被接受 请注意 ASP NET 缓存有一个bug http connect mic
  • 用数字填充 asp.net 下拉列表

    一个简单的查询 我想用从 17 到 90 开始的数字填充下拉列表 最后一个数字应该是像 90 而不是 90 这样的字符串 我猜逻辑将使用 for 循环 如下所示 for int a 17 a lt 90 a ddlAge Items Add
  • 如何从网页启动 Windows 应用程序?

    我们有一个公司内部网 并且权力机构认为拥有一组代表大多数代表使用的应用程序 Outlook Excel 少数其他应用程序 的图标 链接会很好 这个想法是 如果安装了应用程序 单击链接 图标将在客户端计算机上启动该应用程序 有人曾经有过这样的
  • 三层 Asp.Net 应用程序中的异常处理

    1 据我了解 在three tierAsp Net应用程序我们应该通过以下方式实现异常处理 a 我们应该把try catch围绕代码块 位于三层中的任何一层 我们希望页面能够从该代码块正常恢复 当此代码生成异常时 b 我们不应该放try c
  • 如果是持久(保持活动)连接,为什么我会在 Web 请求中到达 endOfStream?

    我有一个网络请求 它创建与服务器的持久 保持活动 连接 例如 webRequest ContentType application x www form urlencoded Set the ContentLength property o
  • Asp 按钮悬停和 CSS

    我有一个 asp 按钮控件 我在上面应用了一些样式 我希望鼠标悬停在该按钮上时 按钮的颜色应该发生变化或类似的情况 但我不明白为什么在 CSS 中按钮悬停功能不起作用 请帮忙 另请让我知道按钮悬停的最佳效果是什么
  • 如何通过覆盖 MSBuild 目标来防止外语资源生成?

    我正在致力于减少大型 C ASP NET 解决方案的编译时间 我们的解决方案使用通常的 resx 文件方法翻译成大约十几种外语 这些资源文件的解析和编译极大地减慢了我们的编译时间 并且是日常的挫败感 我知道可以创建自定义资源提供程序并摆脱
  • Web应用程序结构和部署

    我们的产品是一个 ASP Net Web 应用程序 目前 我们在 Visual Studio 中使用网站项目 但研究使用 Web 应用程序项目已经有一段时间了 我目前正在研究它们 以便我们能够改进我们的部署过程 我们有一个在不同客户之间共享
  • MVC3 和实体框架

    我的问题很简单 将 edmxMVC3 项目的 Web 应用程序的模型文件夹中的文件吗 我的答案非常简单 不要用数据访问逻辑和数据建模搞乱表示层 整个 MVC 应用程序 Visual Studio 解决方案中从下到上至少有 4 个项目 1 P
  • asp.net c# 将数据集中的数据转换为电子邮件正文?

    从数据集到电子邮件正文的最佳方式是什么 我有一个 net 控制台应用程序 用于根据存储过程的结果发送电子邮件通知 并且想知道如何最好地从 SQL 数据转到电子邮件正文 带有颜色和字体的 html 正文是最好的 但纯文本也可以 thanks
  • 在 ASP.NET 中生成新的 SessionId

    登录时我想生成一个新的 SessionId 我已经发现一种有效的解决方案 https stackoverflow com questions 1368403 generating a new asp net session in the c
  • 禁用 ASPNET 身份 2.0 中的用户

    我正在寻找一种方法来禁用用户而不是从系统中删除它们 这是为了保持相关数据的数据完整性 但似乎 ASPNET 身份只提供删除帐户 有一个新的锁定功能 但似乎可以控制锁定以禁用用户 但只有在尝试了一定次数的错误密码后才将用户锁定 还有其他选择吗

随机推荐

  • 在 ggplot2 中对 x 轴日期值进行排序

    我有以下数据集 正如你所看到的 我有两周的一些定量数据 我想对它们的日子进行比较 即 星期一 09 和星期一 10 week date day n chr date chr int 1 Week 09 2016 02 29 Monday 5
  • 如何在matlab中隐藏轴和刻度而不隐藏其他所有内容

    我在 matlab UI 中将图像绘制到轴上 但我不希望轴和刻度线可见 如何防止这种情况发生 以及在哪里进行此调用 我这样做 imagesc myImage parent handles axesInGuide axis off 这是你想要
  • 如何在 Sinatra 代码中发出 POST 请求?

    单击表单中的按钮将发送一个 POST 请求 由以下代码段处理 post register do send post request to http www randomsite com parse response do something
  • JS async/await - 为什么await需要异步?

    为什么使用await需要声明其外部函数async 例如 为什么这个 mongoose 语句需要它所在的函数来返回一个承诺 async function middleware hostname done try let team await
  • MPMediaItem 未使用 MPMediaItemPropertyAssetURL 在 AVAudioPlayer 中播放

    我有这段代码 用于查找并播放 MPMediaItem MPMediaPropertyPredicate predicate MPMediaPropertyPredicate predicateWithValue self persisten
  • 注册自定义单元格时不调用prepareForSegue

    这不是 Segue 标识符拼写错误或类似问题 方法prepareForSegue当我点击表视图控制器中的单元格时 实际上并没有被调用 如果我点击单元格 则仅当我添加新单元格时 控制语句之前的日志语句才不会记录 void prepareFor
  • 1/252 = 0 在 C# 中?

    我正在做计算 在调试时我发现了这个 double num 1 252 当我调试它时 数字设置为零 0 是否有一个原因 我想将其作为实际计算 Thanks 是 该计算正在执行integer算术 尝试这个 double num 1 0 252
  • JavaScript Chrome 扩展 - 从弹出窗口到内容创建新选项卡后发送消息

    在我的扩展的 popup js 中 我想创建一个新选项卡并发送一条消息 content js 必须监听消息并回答 但它不起作用 我尝试了很多在其他问题中找到的解决方案 但没有成功 这是我的文件 Manifest json name Stam
  • 嵌入导航控制器

    我刚刚将 Xcode 从 4 2 更新到 4 3 3 但我不断遇到问题 是否可以在单视图应用程序中添加导航控制器 因为当我尝试将导航控制器嵌入到控制器中时 什么也没有发生 我希望有两个视图控制器通过按钮连接到第二个控制器 并通过导航栏连接到
  • 在 javafx 2 中通过拖动来移动节点的正确方法?

    我正在将具有大量自定义绘画的 Swing Graphics2D 应用程序转换为 JavaFX2 应用程序 虽然我非常喜欢新的 API 但在绘制椭圆时 我似乎遇到了性能问题 我想在鼠标移动到鼠标光标下方时绘制椭圆 当我以稳定的方式 不是快得离
  • 带标头的节点获取 API GET

    https www npmjs com package node fetch https www npmjs com package node fetch节点 v6 4 0 npm v3 10 3 我想在此 API 调用中发送带有自定义标头
  • 如何将 PCL 转换为 .Net 标准库

    所以我有一个 PCL 项目 但现在想更新它以支持 Net Standard 我读过微软网站步骤 https learn microsoft com en us dotnet core porting libraries converting
  • C# 将字节转换为字符串并写入txt文件

    例如我该如何转换byte b new byte 1 b 1 255串起来 我需要一个值为 255 的字符串变量string text 255 然后将其存储在文本文件中 从字节开始 byte b new byte 255 string s E
  • 如何读取多列ListView控件的列名?

    查找 ListView 列名称的最佳方法是什么 我使用在该论坛上找到的过程将 DataTable 转换为列表 但我无法将 Id 列放在第一位 特别是因为并非所有 DataTable 都有 Id 列 我可以在集合 listView Colum
  • IQueryable 和 DbQuery 有什么区别?

    跟进这个问题 答案 如何使实体框架数据上下文只读 https stackoverflow com questions 10437058 how to make entity framework data context readonly 解
  • d3 中的动画折线图

    我找到了example http duspviz mit edu d3 workshop transitions animation d3 中的动画线条系列 我正在尝试在我的中制作相同的动画TS code 但它不成功 Start Anima
  • 如何禁用移动响应式缩放?

    我编写了以下代码来禁用放大或缩小 除以下手机外 它在所有手机上都能正常工作最近的 iPhone 例如 iphone 6 iphone 7 此功能不起作用 我哪里做错了 你的代码没有问题 只是IOS 10不支持它 你可以找到更多here ht
  • 针对不受信任的 SSL 端点生成 WCF 代理

    我需要为客户端公开的服务生成 WCF 代理 该服务被严格锁定 因此事实证明这很困难 另外 我是 WCF 的新手 所以我可能会遗漏一些明显的东西 客户端仅向我们的生产服务器开放了防火墙 因此我无法从我的开发计算机上的 Visual Studi
  • 以编程方式在(线性)布局(即 ScrollView 内部)内添加视图

    我有一个应用程序 点击一些后 会显示新闻内容的活动 我想在其底部显示注释 这些注释是在异步任务中动态加载的 一种方法是使用 ListView 和自定义 ArrayAdapter 但是 我必须将 ListView 放入 ScrollView
  • ASP.NET MVC2 错误:没有为此对象定义无参数构造函数

    编辑 这是固定的 请参阅下面的解决方案 Solution 首先 我错误地将节点定义在 shared web config 中 而不是 WebUI 项目根目录中的 web config 中 我也没有在 web config 中正确定义我的连接