2009-08-20 2 views
1

저는 작은 ASP.Net/C# 응용 프로그램이 많은 회사에서 일합니다. 공통 기능 (예 : Active Directory 조회, FTP 등)을위한 공유 라이브러리를 만들어 가능한 한 많은 기능을 중앙 집중화하려는 노력을 기울여 왔습니다.구성 기반 공유 라이브러리 (DLL)

SMTP 상호 작용을 수행 할 전자 메일 dll을 만들려고합니다. 이 config-based를 동적으로 만들고 싶습니다. 그러나 모든 web.config에 SMTP 서버 이름, 포트 등을 넣을 필요는 없습니다.

구성 기반이지만 각 응용 프로그램의 web.config에 의존하지 않는 공유 라이브러리를 만드는 것이 가장 좋습니다. 나는 또한 그것이 휴대용이기 때문에 machine.config에 묶이지 않는 것을 선호한다.

나는 각각의 앱이 매개 변수를 전달하지 않고 메서드를 호출 할 수 있도록하려면 :

EmailLib.SendEmail("[email protected]", "This is the subject",....); 

감사합니다.

답변

0

어딘가에 구성을 저장해야합니다. . . 데이터베이스가 옵션 일 수 있습니다. 응용 프로그램 특정 구성 테이블과 같은 것입니다. 리플렉션을 사용하여 호출 응용 프로그램의 이름을 결정한 다음이를 사용하여 데이터베이스 테이블에서 행을 조회 할 수 있습니다. 그런데 어떻게 데이터베이스 연결을 구성합니까? 치킨? 계란? 먼저?

GW는 아래의 좋은 아이디어가 있습니다. 그러나 어느 시점에서 필요한 데이터 (구성 파일, 데이터베이스 연결)에 대한 참조를 "하드 코드"로 가질 것입니다. 웹 서비스를 사용하더라도 각 응용 프로그램이 다른 도메인에서 전자 메일을 보내고 웹 서비스에 보낼 도메인을 알려줘야합니다.

0

웹 서비스 또는 WCF 서비스에 전자 메일 기능을 넣을 수 있습니다. 이렇게하면 구성 설정이 한 곳에서 유지됩니다.

0

본질적으로 db 테이블을 읽고 쓰는 이름 가치있는 쌍의 라이브러리 인 "설정"라이브러리를 만들었습니다. 많은 데이터 유형을 보유 할만큼 유연하며 재사용 할 수 있습니다. 다른 라이브러리 각각에 이러한 라이브러리를 쉽게 구현할 수 있습니다.

AgileSetting.SetSetting("EmailSubject", "All your base are belong to us"); 
string emailSubject = AgileSetting.GetSetting("EmailSubject"); 

다른 레벨로 가져 가서 구성하는 데 도움이되는 일종의 그룹화를 만들 수도 있습니다.

0

필자는 장기간에 걸쳐 하드 코딩 된 모든 것을 사용하지 않을 것이라고 주장합니다. 모든 앱은 아마도 지원을 위해 다른 이메일 주소를 가지며 아마 다른 주제 (foo-corp 앱의 일반적인 오류가 아니라 문제에 대한 적절한 설명이 필요합니다)를 사용하고자 할 것입니다.

일반적인 문제에 대해서는 일반적인 'NAnt'빌드가 어떤 방식 으로든 적절하게 처리된다는 '.properties'파일을 가질 수 있습니다.

2

각 응용 프로그램의 web.config (또는 응용 프로그램 구성) 파일에 구성 정보를 저장하는 것이 가장 좋습니다.

정말로 원하지 않는다면 "자신의 영역을 차지하십시오"라고 할 수 있습니다. 특히, 일반적인 .NET 설정 파일과 비슷하지 않은 것을 쓸 것이므로 미래의 유지 관리자는 여러분이하는 일에 대해 혼란스러워하지 않을 것입니다.

DLL의 구성 파일은 항상 어색합니다.DLL의 구성 파일에 대해 다른 응용 프로그램을 설정하기를 원하는 즉시 중요한 배포, 유지 관리, 소스 제어 및 단위 테스트 문제가 발생합니다 (설정이 구성 파일의 첫 번째 위치에있는 주된 원인 중 하나임) , 권리?).

일반적으로 구성 설정은 구성 요소가 아닌 응용 프로그램에 속합니다.

0

나는 IOC 컨테이너에 저장된 외부 파일 (예 : xml, dsl)에서 채워진 구성 클래스를 만든 다음이를 사용하는 서비스에 주입하는 것이 좋습니다. 이 과정은 여기에 잘 설명되어 있습니다 configuration in conjunction with an IOC container

이 장점은 서버 당 다중 구성을 가질 수 있고 단위 테스트를위한 클래스에 구성을 주입 할 수 있다는 것입니다. 게다가 모든 것은 강력하게 형식화되어 있으므로 응용 프로그램이 시작되면 int 또는 int를 문자열로 변환하는 것에 대해 걱정해야합니다.