我刚刚开始使用Unity Dependency Injection。我已经弄清楚如何将它与控制器和模型一起使用。但是,我不确定如何将它与Views ...
一起使用我想要做的是,能够使用已注册的服务从View中检索查找列表。
查看此URL http://blog.simontimms.com/2015/06/09/getting-lookup-data-into-you-view/,它显示了如何使用MVC6。它在视图中使用@inject指令。但是我坚持使用MVC5,它似乎没有这个指令。
是否有一些MVC5替代@inject?
我正在注册我的服务和存储库...
Public Shared Sub RegisterComponents()
Dim container = New UnityContainer()
container.RegisterType(Of IMyService, MyService)()
container.RegisterType(Of IRepository(Of MyModel), MyRepository)()
DependencyResolver.SetResolver(New UnityDependencyResolver(container))
End Sub
我在我的控制器中访问这样的服务......
<Dependency>
Public Property MyModelService() As IMyService
现在我需要知道的是如何将服务注入我的剃刀视图中。
答案 0 :(得分:2)
这可能用途有限,但我遇到了方便的地方。
使用Unity的C#版本
public class InjectedWebViewPage : InjectedWebViewPage<object>
{
}
public class InjectedWebViewPage<T> : WebViewPage<T>
{
[Dependency] protected ISomeService SomeService { get; set; }
/*
* Other Services here...
*/
public override void Execute()
{
}
}
将新类放置在任何地方,只需在Views / web.config中将其引用为@ user1751825状态
<pages pageBaseType="MyNamespace.InjectedWebViewPage"/>
答案 1 :(得分:0)
我找到了一个相对简洁的解决方案。
我只是创建自己的视图基类来继承WebViewPage(泛型和非泛型),然后将注入的服务属性放在那里。
Namespace MyNamespace
Public MustInherit Class MyWebViewPage
Inherits MyWebViewPage(Of Object)
End Class
Public MustInherit Class MyWebViewPage(Of T)
Inherits System.Web.Mvc.WebViewPage(Of T)
<Dependency>
Public Property MyModelService() As MyNamespace.IMyModelService
End Class
End Namespace
然后我将它添加到Views / Web.config中,就像这样......
<pages pageBaseType="MyNamespace.MyWebViewPage"/>
然后,所有服务属性和方法都可以自动用于我的所有视图。