Asp.net mvc 4 我们如何在代码中调用ninjects服务定位器?
首次使用stackoverflow+ninject(国际奥委会的) 我有一种情况,在这种情况下,我以一种在其中包含模型的方式实现业务对象。。。i、 eAsp.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
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.包含用于保存域实体的逻辑的存储库。