c# - MVC3 Controller 构造函数 + Ninject

标签 c# asp.net-mvc ioc-container ninject

我目前正在开发 MVC3 Web 应用程序,遇到了 Ninject 的新问题。

我在我的 Controller 中使用以下代码:

public class TestController : Controller
{       
    public IRepository<CustomerModel> rep;

    public TestController(IRepository<CustomerModel> repository)
    {
        this.rep = repository;
    }

    public ActionResult Index()
    {
        return View();
    }
}

还有我的 Ninject 模块:

public class RepositoryModule : NinjectModule
{
    public override void Load()
    {
        Bind(typeof(IRepository<>)).To(typeof(Repository<>));
    }
}

然而,这只会抛出“System.MissingMethodException:没有为此对象定义的无参数构造函数”。当我尝试呈现索引 View 时。

如果我再添加:

public TestController() : this(new Repository<CustomerModel>(new XenCRMEntities())) { }

所以我实际的 TestController 看起来像:

public class TestController : Controller
{       
    public IRepository<CustomerModel> rep;

    public TestController() : this(new Repository<CustomerModel>(new XenCRMEntities())) { }

    public TestController(IRepository<CustomerModel> repository)
    {
        this.rep = repository;
    }

    public ActionResult Index()
    {
        return View();
    }
}

它有效,但正如您所看到的,新的构造函数几乎打破了 IoC 的全部要点。

我该如何解决这个问题?

提前致谢。

最佳答案

一个简短的测试表明,MVC3 扩展中的泛型绑定(bind)没有问题。我猜问题不在 Controller 中,而是无法创建存储库,因为它有一些未知的依赖项。

但是这让我稍微更改了依赖项解析器,以便在请求的类型可以解析但其中一个依赖项无法解析时显示 Ninject 堆栈跟踪。在构建服务器上更新到最新版本以获得更好的堆栈跟踪。

关于c# - MVC3 Controller 构造函数 + Ninject,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4369086/

相关文章:

c# - 通过代码将文本框的高度绑定(bind)到父级

c# - 在保存到数据库之前检查类是否为新实例或至少填充一次属性

c# - 从 MVC 5.1 EnumDropDownListFor 中排除/删除值

c# - 如何覆盖在 CaSTLe Windsor 中注册的组件?

c# - .NET CompactFramework TextBox.selectAll on gotFocus

c# - 在 ASP.NET MVC 5 中,在我应用迁移来更改 MODEL 类后,它也会更改我的 View .cshtml 文件吗?

.net - ASP.net MVC 项目是否支持添加动态数据?

unity-container - Unity 静态工厂扩展

Spring bean 未注入(inject) JSF 托管 bean(这是一个抽象父类(super class))

c# - ASP.NET c# 如果选中复选框,则仅验证表单的一部分