使用 Unity.Mvc5 将服务注入 MVC 视图
Inject Service into MVC View with Unity.Mvc5
我刚刚开始使用 Unity 依赖注入。我已经弄清楚如何将它与控制器和模型一起使用。但是我不确定如何将它与视图一起使用...
我想做的是能够使用已注册的服务从视图中检索查找列表。
看看这个 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
我现在需要知道的是如何将服务注入我的 razor 视图。
我找到了一个相对简洁的解决方案。
我只是创建自己的视图基础 class 以继承 WebViewPage(通用的,和 non-generic),然后将注入的服务属性放在那里。
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"/>
然后所有服务属性和方法自动可供我的所有视图使用。
这可能用途有限,但我有 运行 到方便的地方。
使用 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()
{
}
}
将新的 class 放在任何地方,只需在 Views/web.config 中引用它作为 @user1751825 状态
<pages pageBaseType="MyNamespace.InjectedWebViewPage"/>
我刚刚开始使用 Unity 依赖注入。我已经弄清楚如何将它与控制器和模型一起使用。但是我不确定如何将它与视图一起使用...
我想做的是能够使用已注册的服务从视图中检索查找列表。
看看这个 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
我现在需要知道的是如何将服务注入我的 razor 视图。
我找到了一个相对简洁的解决方案。
我只是创建自己的视图基础 class 以继承 WebViewPage(通用的,和 non-generic),然后将注入的服务属性放在那里。
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"/>
然后所有服务属性和方法自动可供我的所有视图使用。
这可能用途有限,但我有 运行 到方便的地方。
使用 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()
{
}
}
将新的 class 放在任何地方,只需在 Views/web.config 中引用它作为 @user1751825 状态
<pages pageBaseType="MyNamespace.InjectedWebViewPage"/>