Asp.net mvc 4 我们如何在代码中调用ninjects服务定位器?

Asp.net mvc 4 我们如何在代码中调用ninjects服务定位器?,asp.net-mvc-4,dependency-injection,models,model-binding,ninject.web.mvc,Asp.net Mvc 4,Dependency Injection,Models,Model Binding,Ninject.web.mvc,首次使用stackoverflow+ninject(国际奥委会的) 我有一种情况,在这种情况下,我以一种在其中包含模型的方式实现业务对象。。。i、 e Public Class Whatever Implements IWhatEver Public Property Id as Integer Public Property Name as String Public Function SetWhatEver() as Whatever

首次使用stackoverflow+ninject(国际奥委会的)

我有一种情况,在这种情况下,我以一种在其中包含模型的方式实现业务对象。。。i、 e

Public Class Whatever
Implements IWhatEver
      Public Property Id as Integer
      Public Property Name as String

      Public Function SetWhatEver() as Whatever
           'Do Whatever Settings
      End Function
End Class
我将ninject用于DI(依赖项注入),但问题是我不能使用接口作为在操作中传递的模型,因此,我试图创建一个自定义modelbinder,并希望使用
bindingContext.ModelType
传递给ninject和ninject来为我解析它,这样我就可以使用元数据进行绑定

Public Overrides Function BindModel(controllerContext As ControllerContext, bindingContext As ModelBindingContext) As Object

        Dim modelType = ninjectPleaseResolve(bindingContext.ModelType)
        Dim metaData = ModelMetadataProviders.Current.GetMetadataForType(Nothing, modelType)

        bindingContext.ModelMetadata = metadata

    Return MyBase.BindModel(controllerContext, bindingContext)
End Function
我希望这是有意义的。。。顺便说一句,我试着寻找答案,但网上没有任何东西对我有意义,所以请你用简单的术语解释一下

编辑

我在下面添加控制器代码,让您更好地理解我正在尝试做的事情。。我不想使用Whatever类,而是想使用控制器中的IWhatever进行处理。。。请看下面的例子

Public Class MainController
Inherits System.Web.Mvc.Controller

Dim repository As IWhatever

Public Sub New(pWhatever As IWhatever)
    repository = pWhatever
End Sub


Function Index(myValues As IWhatever) As ActionResult

      'So I can process these values to my liking...
      repository.SetWhatEver(myValues)

      ' and then perhaps other functions like...
      repository.Save()

      Return View()
End Function
我希望这现在有点道理

问题是我不能使用接口作为传递的模型 在行动中


您不应该通过action方法传入服务。您应该通过构造函数传递服务。这样,您的容器就可以为您构建控制器和所有相关对象,这样您就不必编写自定义模型绑定器。

我已经这样做了,问题是相同的服务包含我的模型。。i、 e.财产。。我们可以说这是一个领域模型。。。我希望使用相同的方法从控制器的视图中获取/映射值。。我希望这是有道理的。。否则,构造函数方法工作正常,ninject注入效果良好,我正在使用服务。。。我需要一个解决方案来将值传递给动作,而不必重写另一个模型。@inN0Cent:不幸的是,你对我来说没有意义。你能更新你的问题并添加更多关于你的问题的信息吗?这里的问题是你在混合数据和行为。不要那样做。通过构造函数注入的依赖项用于服务(具有行为且无数据的类)。数据结构(运行时值)传递给方法(例如操作方法和服务上的方法)。这些结构不应该包含业务逻辑,而应该只包含简单的逻辑和数据。在他们自己的类中分离这些职责,你的问题就会消失。那么你的意思是我可以有一个单独的视图模型来实现iWhatever,然后我可以将它传递给服务?我的意思是,这将是一个更好的主意,它也将是单独的?你应该有1。包含MVC视图要显示的数据的视图模型。2.包含要保存的数据的域实体(可以作为属性放置在视图模型上)。3.包含用于保存域实体的逻辑的存储库。