使用Unity.Mvc5将服务注入MVC​​视图

时间:2017-01-27 14:07:52

标签: asp.net-mvc dependency-injection asp.net-mvc-5 unity-container

我刚刚开始使用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

现在我需要知道的是如何将服务注入我的剃刀视图中。

2 个答案:

答案 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"/>

然后,所有服务属性和方法都可以自动用于我的所有视图。