0

我找到了一些关于这个问题的例子,但我无法在我的软件中使用你知道怎么做吗?你能解释一下我为什么会遇到这个问题吗?

没有为此对象定义无参数构造函数。说明:执行当前 Web 请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。

异常详细信息:System.MissingMethodException:没有为此对象定义无参数构造函数。

SpotrStore.Domain

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.Entity;
using SportsStore.Entities;

namespace SportsStore.Concrete
{
    public class EFDbContext : DbContext
    {
        public DbSet<Towar> Products { get; set; }
    }
}

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using SportsStore.Entities;

namespace SportsStore.Concrete
{

    namespace SportsStore.Domain.Concrete
    {
        public class EFProductRepository 
        {
            public EFDbContext context = new EFDbContext();
            public IQueryable<Towar> Towar
            {
                get { return context.Products; }
            }
        }
    }
}

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using SportsStore.Entities;

namespace SportsStore.Concrete
{
    public interface ITowarRepository
    {
        IQueryable<Towar> Towar { get; }
    }
}

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ComponentModel.DataAnnotations;

namespace SportsStore.Entities
{
    [Table("Towar")]
   public class Towar
    {

       [Key]
       public int Id_tow { get; set; }
       public string Nazwa { get; set; }
       public string Opis { get; set; }
       public string Cena { get; set; }
       public int Id_kat { get; set; }

    }
}

SportStore.WebUi

    using System.Linq;
    using System.Web;
    using System.Web.Mvc;
    using SportsStore.Concrete;
    using SportsStore.WebUI.Models;

    namespace SportsStore.WebUI.Controllers
    {
        public class DefaultController : Controller
        {
            public ITowarRepository repository;

            public DefaultController(SportsStore.Concrete.ITowarRepository repo)
            {
                repository = repo;

            }

            public ActionResult Index()
            {
                SomeView ViewModel = new SomeView
                {
                    Towar = repository.Towar
                    .OrderBy(p => p.Id_kat)
                };
                return View(ViewModel);
            }

        }
    }

    -----------------------------------------------

    @model SportsStore.WebUI.Models.SomeView

    @{
        ViewBag.Title = "Index";
    }

    <h2>Index</h2>

    @foreach (var item in @Model.Towar)
    {
        @item.Id_kat
    }
---------------------------


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

namespace SportsStore.WebUI.Models
{
    public class SomeView
    {
        public IEnumerable<SportsStore.Entities.Towar> Towar { get; set; }
    }
}
4

2 回答 2

1

默认情况下,框架将调用一个无参数的构造函数,它在您的控制器中不存在。一个简单的解决方法是添加这个无参数构造函数:

public DefaultController() : this(new SportsStore.Concrete.ITowarRepository()) { }
于 2012-09-28T18:35:48.780 回答
0

除了@dombenoit 的回答,因为您唯一的构造函数是:

public DefaultController(SportsStore.Concrete.ITowarRepository repo)

看起来您正在尝试使用依赖注入来构造函数注入数据存储库的实例。所以可能你的问题是你有一些你正在尝试使用的依赖注入框架,并且配置不正确?

于 2012-09-28T18:42:11.423 回答