1편은 너무 쉬웠으리라 생각한다.
그냥 Static Member로 구성된 ConfigurationManager 를 이용해 .NET 에서 Configuratoin 파일에 접근할 수 있도록 제공하는 appSettings Section 에 단순히 접근하는 방법에 대해서만 언급했기 때문에...

뭐 처음 하시는 분은 뭐 생소할 수도 있긴 하겠지만 말이다. 나처럼.. ^^

이제부터는 .NET 에서 제공하는 기본적인 appSettings, connectionStrings 이외의 장소에 내게 필요한 정보들을 Configuration 에 저장하기위한 작업을 해보도록 하자.

음... Configuration 의 Properites 를 정의 하는데는 프로그램적정의하는 방법과 선언적(declarative)으로 정의 하는 방법, 두가지 방법을 사용할 수 있다.

시작하자.
우리는 우리만의 Section을 만들고 그 Section 내에 우리들이 관리하고자 하는 정보들을 넣을 것이다.

어떤 정보인가 보면...
요런식의 정보를 넣으려 한다.

그러므로 먼저 Section 을 구성해야하겠다.
Static 한 Property를 정의하는 것부터 시작해 보자.

먼저 "Configuration" 이라는 클래스라이브러리 프로젝트를 하나 추가하자.
그리고 그 클래스 라이브러리의 속성에 들어가서 NameSpace 를 "Woojja.Configuration" 라 설정하고 저장한다.
아래 그림과 같이...

그리고 Configuration 프로젝트에 자동으로 추가되어있는 Class1.vb 를 삭제하고  "WoojjaConfigurationSection.vb" 라는 이름의 Class 를 하나 추가한다.

그리고 "WoojjaConfigurationSection.vb" 의 내용은 아래와 같다.


    1 Imports System

    2 Imports System.Configuration

    3 

    4 Public Class WoojjaConfigurationSection

    5   Inherits ConfigurationSection

    6 

    7   Private Shared woojjaProperties As ConfigurationPropertyCollection

    8 

    9   Private Shared nameProperty As ConfigurationProperty

   10   Private Shared isManProperty As ConfigurationProperty

   11   Private Shared birthdayProperty As ConfigurationProperty

   12 

   13 #Region "생성자"

   14   Shared Sub WoojjaConfigurationSection()

   15     nameProperty = New ConfigurationProperty("nameValue", GetType(String), String.Empty, ConfigurationPropertyOptions.IsRequired)

   16     isManProperty = New ConfigurationProperty("isManValue", GetType(Boolean), False, ConfigurationPropertyOptions.None)

   17     birthdayProperty = New ConfigurationProperty("birthdayValue", GetType(Date), Nothing, ConfigurationPropertyOptions.None)

   18 

   19     woojjaProperties = New ConfigurationPropertyCollection()

   20     woojjaProperties.Add(nameProperty)

   21     woojjaProperties.Add(isManProperty)

   22     woojjaProperties.Add(birthdayProperty)

   23 

   24   End Sub

   25 #End Region

   26 

   27 #Region "Properties"

   28   <ConfigurationProperty("nameValue", isrequired:=True)> _

   29   Public ReadOnly Property NameValue() As String

   30     Get

   31       Return CStr(MyBase.Item("nameValue"))

   32     End Get

   33   End Property

   34 

   35   <ConfigurationProperty("isManValue")> _

   36   Public ReadOnly Property isManValue() As Boolean

   37     Get

   38       Return CBool(MyBase.Item("isManValue"))

   39     End Get

   40   End Property

   41 

   42   <ConfigurationProperty("birthdayValue")> _

   43   Public ReadOnly Property BirthdayValueValue() As Date

   44     Get

   45       Return DirectCast(MyBase.Item("birthdayValue"), Date)

   46     End Get

   47   End Property

   48 #End Region

   49 End Class



그리고 이젠 요렇게 Section을 구성했으니 Configuration 에다가 이런 Section을 사용한다고 선언해야 할 것이다. 요로케...

section name="woojja" type="Woojja.Configuration.WoojjaConfigurationSection, Configuration"

이렇게 되어있는 걸 볼텐데...
name 은 아래 선언할 이름을 나타내고(woojja 라는 태그로 시작한다는 것을 나타낸다.)
type 은 Section 이 정의 되어있는 네임스페이스를 나타내고 assembly 파일 명을 같이 나타낸다.)
클래스 뷰로 확인해 보면
위 그림을 보면 Woojja.Configuration.WoojjaConfigurationSection 이런식의 Hierarchy 를 가지고 있다는 걸 알 수 있을 것이다.
그리고 쉼표다음의 ", Configuration" 는 Configuration 프로젝트를 컴파일하게 되면 만들어지는 assembly 명을 나타낸다.

이젠 잘 되나 한번 보자... ^^

먼저 방금 우리가 추가한 Configuration 프로젝트를 참조추가한다.

이전 1편에서 사용했던 폼을 사용하려 한다.

TextBox 두개와 RadioButton 을 두개 추가하고 버튼도 하나 추가한다.
모양은 이런모양

그리고 Behind Code 를 보게되면

    1 Imports System.Configuration

    2 Imports Woojja.Configuration

    3 

    4 Public Class Form1

    5 

    6   Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

    7     Me.TextBox1.Text = ConfigurationManager.AppSettings.Item("woojja").ToString()

    8   End Sub

    9 

   10   Private Sub btnGetinfo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnGetinfo.Click

   11     Dim woojjaSection As WoojjaConfigurationSection = DirectCast(ConfigurationManager.GetSection("woojja"), WoojjaConfigurationSection)

   12     Dim strName As String = woojjaSection.NameValue

   13     Dim isMan As Boolean = woojjaSection.isManValue

   14     Dim datBirthday As Date = woojjaSection.BirthdayValueValue

   15 

   16     txtName.Text = strName

   17     If isMan Then

   18       rdoMan.Checked = True

   19     Else

   20       rdoWoman.Checked = True

   21     End If

   22     txtbirthday.text = datBirthday.ToString("yyyy-MM-dd")

   23   End Sub

   24 End Class


자~~ 이젠 F5 를 쿡 눌러보자...


훔.. 잘가져온다.

에러가 발생하는 경우라고 한다면
아래의 그림처럼 app.config 파일의 Section 의 Type을 선언할때 대소문자를 체크해 보아야 할것이고
assembly 의 Name 을 체크해 보아야 할 것이다.

내용은 길었지만 이번에도 그리 어려운 내용은 아니다.
다음에 진행할 내용도 그리 어려운 내용은 아닐 것이므로 어려워할 필요도 없을 것이다.
빠른시간안에 내용을 진행하도록 하겠다.(벌써 시간이 이렇게 됐네... 아무리 내일이 일요일이지만... ㅡㅡ')

다음 압축파일은 1, 2편에서 사용한 소스가 포함되어있다.


편안한 밤되시고...

행복한 고수되소서..


woojja ))*
\\\\\\\\\\\\\\\\\\\\\\\\\\\\


반응형

.NET 2.0 의 Configuration 에 대해서 정리 하려한다.

Configuration 정보를 구성해야 할 일이 생겼는데… 지식이 너무 부족하여 공부한 내용을 정리해보자 ㅋㅋ

.NET 1.1 버전에서는 ConfigurationSettings Class 를 이용해서 Access 할 수 있었으나 .NET 2.0 에서의 Configuration 은 System.Configuration Namespace 에 포함되어 있는데 이를 사용하기 위해서는 System.Configuration.dll 을 참조해야한다. 기존 1.1 의 ConfigurationSettings 도 사용할 수 있지만 이젠 System.Configuration 내의 객체들을 사용하자.

새로운 Configuration System 에서는 ConfigurationManager Static Class 가 중심을 이루며 이 클래스의 모든 Member 또한 모두 Static 이다.

새로운 Configuration Feature 는 Configuration 정보를 특정 Section 에 저장도할 수 있으며, 새로운 Configuration System은 기존에 만들어져 있는 Class들의 상속을 통해서 사용자 configuration Section 을 구성할 수 있으며 추가적으로 Configuration의 Validator를 구성할 수 있다.

Reflector 를 통해서 조회해본 System.Configuration Assembly 의 모습이다.

이 안의 Class 를 이용해서 Custom Configuratation을 구성해 보려 한다. (잘 이끌어 갈는지 모르겠다. ^^)

먼저 Custom Configuration 을 작성하기 전에 기본적으로 Confiration 정보에 접근하는 방법을 간단히 살펴본 후에 본격적으로 시작해보자.

음… .NET 2.0 버전을 바탕으로 작성을 할 것이고… 상위버전은 추후에 추가적으로 언급할 수 있을 것이다.

먼저 프로젝트를 시작하고 새항목을 추가하여 "응용프로그램 구성파일"을 추가한다.

그리고 아래와 같이 appSettings 태그를 추가합니다.
그리고 기존에 포함된 폼에 TextBox를 추가하고
이제부터 System.Configuration Namespace 를 사용할 것이므로
참조를 추가하기로 하겠습니다.


디자인모드에서 폼을 더블클릭하여 Form Load 이벤트를 작성할 수 있는 상태로 만듭니다.
그리고 폼 비하인드 코드에
아래 그림와 같이 imports System.Configuration Namespace 를 추가합니다.
그리고 폼 로드 이벤트에 아래와 같이 코드를 추가합니다.
Me.TextBox1.Text = ConfigurationManager.AppSettings.Item("woojja").ToString()


F5를 클릭해서 나타나는 폼의 모양을 확인하시고요...

지금은 appSettings 한가지만 봤지만 기본적인 Application 에서 사용할 수 있는 Configuration 은 appSettings 이외에도 Database 의 ConnectionString 을 담을 수있는 connectionStrings 가 있다.

갑자기 생각을 바꿨다
글 하나가 너무 길면 짜증나므로...
몇편으로 나눠서 하는게 더 나을 듯하다. ㅡㅡ'
나 자신이 긴 글을 싫어 하므로...

woojja ))*
\\\\\\\\\\\\\\\\\\\\\\\\\\



반응형


온라인 학습생태계 프로젝트 구인 (일주일에 10시간 일할 사람~)



지원시 필요한 접수 서류들을 보았습니다. 

처음엔 호기심으로... 

그런데... 

하나하나 읽어보면서 그 속에서 제가 해당되는 항목들이 무엇이 있을까?

나 자신의 가치 , 내 주위 사람들을 위한 일을 한 것이 무엇이 있을까? 얼마나 있을까...

갑자기 부끄러워 집니다.


"지원 자격이 안되는 구나" 라는 생각이 들자, 더욱 더 참여하고 싶어지는 부질없는 욕심이 생기는군요...



그리고 그 부질없음을 깨닫고 있는 나 자신에 대해 반성해 봅니다.


바뀌어 보렵니다.

감사합니다.



행복한 고수되십시요...


woojja ))*
\\\\\\\\\\\\\\\\\\\\\


정성태 2007-07-14 오후 9:49:43
우정환 씨의 은근한 유머 감각 자체가... 주위사람들에겐 더없이 좋은 선물입니다. ^^
우정환 씨 덕분에. 프로젝트 분위기가 더욱 좋아졌습니당. ^^
woojja 2007-07-14 오후 10:34:39
아휴~~ 플젝이 잘 되야... 분위기가 더욱 좋을텐데 말이죠... ^^
마법사가 관건인거 같은데...

마법사... 잘 되어야 할터인데... ^^

추신) 난중에 그런 유머는 그만하라는 말씀이 나오지 않을까 걱정입니다. ㅋㅋㅋ
반응형

+ Recent posts