WCF 서비스를 작성 중이며 서비스 클래스를 여러 개의 부분 클래스 파일로 나눠서 모든 ServiceContract-Implementation이 자체 파일을 가져옵니다. 나는 하나의 파일을 가지고 있지만 그 안에는 예를 들어 있어야합니다. 로거와 같은 모든 부분 클래스 파일에서 사용되는 멤버입니다. 이 서비스가 어떤 식 으로든 중요하다면 IIS 7에서 호스팅됩니다.부분 클래스의 공유 멤버에 액세스
부분 클래스 파일 1
<ServiceBehavior(NameSpace:= WCFHelper.SERVICENAMESPACE, AddressFilterMode:= AddressFilterMode.Any)> _
Partial Public Class DataService
#Region "Members"
Private Shared m_Log As log4net.ILog = log4net.LogManager.GetLogger(GetType(DataService))
#End Region
End Class
부분 클래스 파일이 (간단한 예제를 계속 냈다 불필요한 코드)
Partial Public Class DataService
Implements IContractAssets
<SomeCustomAttribute()> _
Public Function GetData(ByVal ID As Int64) As SomeCustomClass Implements IContractAssets.GetData
Try
Return SomeFunction(ID)
Catch ex As Exception
m_Log.Error("SomeError.", ex)
ThrowFault()
End Try
End Function
End Class
코드는 잘 컴파일하지만 런타임에 내가 도착 BC30451: The name m_Log is not declared
오류 (정확한 단어를 모르는 경우 독일어 메시지가 표시됩니다.)). 나는 그것이 m_Log 또는 의존하는 어셈블리의 타입과 관련이 있다고 생각하지 않는다. 왜냐하면 나는 이것을 String으로 시도 할 때 같은 에러가 발생하기 때문이다.
내가 뭘 잘못하고 있니? 이 작품을 어떻게 만들 수 있습니까?
편집 : 간단한 콘솔 응용 프로그램에서 아무 문제없이 같은 것을 시도하고있었습니다. :(
대부분의 부분은 예상하지 못한 순서로 구성됩니다. 이것은 부분적인 것을 사용하는 이상한 방법입니다. 대신에 본질 또는 합성을 사용하는 방법을 생각해보십시오. –
부분 클래스를 사용하는 이유는 로거 때문이 아닙니다. 내 serviceclass를 명확하게 배치하기를 원하기 때문입니다. 문제는 "하나의 클래스"에 대해 여러 로거를 정의하고 싶지 않다는 것입니다. –
두 부분 클래스가 모두 동일한 네임 스페이스에 있는지 확인하십시오. 때때로 C#에서 이와 같은 작업을 수행하고 문제없이 작동합니다 ... –