使用 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"/>