다음을 통해 공유


공용 구조체 뷰 클래스 만들기

공용 구조체 뷰 클래스는 원본 클래스 인스턴스의 논리적 공용 구조체입니다. 원본 쿼리에 WHERE 절을 포함하여 인스턴스를 제한하지 않는 한, 공용 구조체 뷰 클래스에는 소스 클래스의 모든 인스턴스가 포함됩니다.

공용 구조체 뷰 클래스는 서로 다른 네임스페이스 또는 컴퓨터에 있는 유사하거나 동일한 클래스의 인스턴스를 확인할 때 유용합니다. 예를 들어 모니터링할 다양한 디스크 드라이브의 인스턴스를 포함하는 공용 구조체 클래스를 만들 수 있습니다.

어떤 원본 클래스 인스턴스에도 없는 속성을 공용 구조체 뷰 클래스의 속성의 기반으로 할 수도 있습니다. 원본 클래스 인스턴스에 동일한 속성이 없는 경우, 공용 구조체 클래스 인스턴스의 속성의 값은 NULL입니다. 예를 들어 한 하드 디스크 드라이브에 온도 속성이 있지만 다른 드라이브에는 없는 경우에도 두 드라이브 간의 공용 구조체를 만들 수 있습니다.

다음 절차에서는 공용 구조체 뷰 클래스를 만드는 방법을 설명합니다.

공용 구조체 뷰 클래스를 만드는 방법

  1. Union 문자열 한정자를 사용하여 클래스 정의를 시작합니다.

    JoinOn, AssociationUnion 한정자는 함께 사용할 수 없습니다.

  2. ViewSources 한정자를 사용하여 뷰 클래스에서 사용되는 원본 클래스를 정의하는 쿼리를 만듭니다.

  3. ViewSpaces 한정자를 사용하여 원본 클래스가 있는 네임스페이스의 이름과 위치를 정의합니다.

  4. PropertySources 한정자를 사용하여 원본 클래스의 속성에 매핑되는 속성을 정의합니다.

    필요한 경우 HiddenDefault 한정자를 사용하여 원하는 속성이 원본 클래스에 속하도록 태그를 지정할 수 있습니다.

  5. 공용 구조체 뷰 클래스의 원본 클래스의 키 속성을 정의합니다.

    각 소스 클래스에는 CIMType과 일치하는 동일한 수의 키 속성이 있어야 합니다. 또한 공용 구조체 뷰 클래스의 키는 모든 원본 인스턴스를 고유하게 식별해야 합니다. 인스턴스가 고유하도록 시스템 속성을 지정해야 하는 경우도 있습니다. 예를 들어 서로 다른 두 네임스페이스에 있는 두 개의 동일한 클래스의 공용 구조체에서 보기를 만드는 경우, 뷰 클래스에 __Namespace 속성을 키로 포함하여 두 인스턴스를 구분할 수 있습니다. 동일한 네임스페이스에서 두 개의 유사한 클래스를 사용하여 뷰를 만드는 경우, __Class 속성을 사용하여 두 클래스를 구분할 수 있습니다. 뷰 클래스의 시스템 속성과 충돌하지 않도록 뷰에 있는 시스템 속성 이름을 바꿉니다.

  6. MethodSource 한정자를 사용하여 원하는 메서드를 정의합니다.

    다른 뷰 클래스와 달리 공용 구조체 뷰를 수정하는 메서드를 만들 수 있습니다.

다음 코드 예제에서는 공용 구조체 뷰 클래스를 설명합니다.

[Union, ViewSources{"SELECT Description, DeviceID, __Namespace, FileSystem, FreeSpace, VolumeName FROM LocalDisk", 
    "SELECT Description, DeviceID, __Namespace, FileSystem, FreeSpace, VolumeName FROM RemoteDisk"}, 
    ViewSpaces{"\\\\.\\Root\\LocalNamespace","\\\\.\\Root\\RemoteNamespace"}, 
    dynamic: ToInstance, provider("MS_VIEW_INSTANCE_PROVIDER")]

class UnionOfDrives

{
    [PropertySources{"Description", "Description"}] string des;
    [PropertySources{"DeviceID", "DeviceID"}, key] String did;
    [PropertySources{"__Namespace", "__Namespace"}, key] String KEYID;
    [PropertySources{"FileSystem", "FileSystem"}] String fsystem ;
    [PropertySources{"FreeSpace", "FreeSpace"}] uint64 fspace;
    [PropertySources{"VolumeName", "VolumeName"}] String vname;
};