ASP.NET MVC Global.asax共享属性

时间:2011-04-20 20:16:24

标签: asp.net-mvc

将共享属性挂起global.asax(MvcApplication类)是否可以?

然后在其他区域访问它:

MvcApplication.[SharedPropertyName]

修改

我要做的是拥有一个全局可访问的属性,这是我的应用程序设置。

我使用XmlSerializer来序列化/反序列化包含所有这些属性的对象。它工作得很好,但Load上的ApplicationSettings方法是共享的,并返回ApplicationSettings的一个实例,所以人们在singelton周围建议的其他一些想法是行不通的。这是ApplicationSettings类:

Public Class ApplicationSettings

#Region "Members/Properties"

    Public Property Property1 As String
    Public Property Property2 As String
    ...

#End Region

#Region "Methods"

    Public Shared Function GetFilePath() As String
        Return HttpContext.Current.Server.MapPath("/Bin/Settings.config")
    End Function

    Public Shared Function Load() As ApplicationSettings
        Try
            Dim Serializer As XmlSerializer
            Dim Settings As ApplicationSettings

            Using Reader As New StreamReader(GetFilePath)
                Serializer = New XmlSerializer(GetType(ApplicationSettings))
                Settings = CType(Serializer.Deserialize(Reader), ApplicationSettings)
                Reader.Close()
            End Using

            Return Settings

        Catch ex As Exception
            'Return New ApplicationSettings
            Return Nothing

        End Try

    End Function

    Public Sub Save()
        Dim Serializer As XmlSerializer

        Using Writer As New StreamWriter(GetFilePath, False)
            Serializer = New XmlSerializer(GetType(ApplicationSettings))
            Serializer.Serialize(Writer, Me)
            Writer.Flush()
            Writer.Close()
        End Using

    End Sub

#End Region

End Class

2 个答案:

答案 0 :(得分:1)

我会说不。可能有更好的方法来做你想做的事。

答案 1 :(得分:1)

不推荐。如果您需要一个全局可访问的变量或属性,那么它更适合您的类继承的基类。

This link给出了一个控制器基类的例子。

修改

根据您的编辑,很难推荐具体的东西,因为如何使用这些设置可以推动您的方法。以下是一些常规提示:

  1. 我将您的设置拆分为一系列与其关注领域截然不同的基类。因此,关于FunctionalityX的设置存在于处理FunctionalityX的类中。
  2. 我会利用你的web.config。我相信你已经这样做了,但只是确保你没有重复配置工作。 Web.Config是大多数的正确位置,您可以添加更多。已存在用于从Web配置中提取配置信息的类。
  3. 好的,有了这样说,除了这两条道路:

    1. 我将您的课程设置为静态,因此您可以从任何地方引用您的课程,而无需像这样实例化:ApplicationSettings.SettingValue
    2. 我在ApplicationSettings类上有明确的设置属性,并以这种方式直接引用它们。如果它们未实例化,您可以根据需要从XML中延迟加载它们。
    3. 如果设置不是动态的,我会缓存您的设置。
    4. 因此,有一些一般提示可能会产生更好的解决方案。如果没有关于它将如何使用的更多信息,很难推荐具体的东西。

      最终编辑:

      在下面的评论中进行了一些讨论后,我们发现此资源修复了OP的问题:

      http://haacked.com/archive/2007/03/12/custom-configuration-sections-in-3-easy-steps.aspx