DesignerSerializationManager Sınıf

Tanım

Arabirimin IDesignerSerializationManager bir uygulamasını sağlar.

public ref class DesignerSerializationManager : IServiceProvider, System::ComponentModel::Design::Serialization::IDesignerSerializationManager
public class DesignerSerializationManager : IServiceProvider, System.ComponentModel.Design.Serialization.IDesignerSerializationManager
type DesignerSerializationManager = class
    interface IDesignerSerializationManager
    interface IServiceProvider
Public Class DesignerSerializationManager
Implements IDesignerSerializationManager, IServiceProvider
Devralma
DesignerSerializationManager
Uygulamalar

Açıklamalar

Arabirim IDesignerSerializationManager , serileştirmeyi denetleen bir nesnenin biçim bağımsız arabirimi olacak şekilde tasarlanmıştır. Temelde seri durumdan çıkarma işlemini gerçekleştiren seri hale getiricilere bağlam ve hizmetler sağlar. IDesignerSerializationManager nesneleri izleyerek seri durumdan çıkarma işlemine yardımcı olur. Bu teknikte arabirime IDesignerHost benzer: tasarımcılar aslında kullanıcı arabirimini (UI) sağlar ve IDesignerHost farklı tasarımcıların birlikte çalışmasını sağlayan tutkalı sağlar.

DesignerSerializationManager sınıfı uygularIDesignerSerializationManager. gibi BinaryFormatterçalışma zamanı serileştiricilerine benzer genel bir seri durumdan çıkarma biçimi sağlamak için tasarlanmıştır.

Sınıfı DesignerSerializationManager üç hedefe ulaşır:

  • Çeşitli biçimlerin seri durumdan çıkarılması için kullanılabilecek basit ve anahtar teslimi bir nesnedir.

  • Geneldir ve belirli bir biçime bağlı değildir. CodeDOM seri durumdan çıkarma ve işaretleme seri durumdan çıkarma için eşit olarak kullanılabilir.

  • Genişletilebilir ve kopyalama/yapıştırma ve geri alma/yineleme senaryolarında kullanılan farklı serileştirme yöntemlerini destekler.

Tasarım zamanı serileştirmesi, çalışma zamanı nesne serileştirmesinden aşağıdaki farklara sahiptir:

  • Serileştirmeyi gerçekleştiren nesne genellikle çalışma zamanı nesnesinden ayrıdır, böylece tasarım zamanı mantığı bir bileşenden kaldırılabilir.

  • Serileştirme düzeni, nesnenin tamamen başlatılacağını ve seri durumdan çıkarma sırasında özellik ve yöntem çağrıları aracılığıyla değiştirileceğini varsayar.

  • Nesne üzerinde hiçbir zaman ayarlanmamış değerlere sahip bir nesnenin özellikleri (özellikler varsayılan değerleri içerir) serileştirilmemiştir. Buna karşılık, seri durumdan çıkarma akışında delikler olabilir.

  • Bir nesnenin tam seri hale getirilmesi yerine serileştirme akışındaki içeriğin kalitesine vurgu yapılır. Bu, bir nesneyi seri hale getirmenin tanımlı bir yolu yoksa, bir özel durum atmak yerine bu nesne atlanabilir anlamına gelir. Serileştirme altyapısı, hangi hataların yoksayılıp hangilerinin kurtarılamaz olduğuna karar vermek için burada buluşsal yöntemler sağlayabilir.

  • Seri hale getirme akışı seri durumdan çıkarma için gerekenden daha fazla veriye sahip olabilir. Örneğin kaynak kodu serileştirmesinde kullanıcı kodu, nesne grafiğinin seri durumdan çıkarılması için gereken kodla karıştırılır. Seri durumdan çıkarmada bu kullanıcı kodu yoksayılmalıdır ve serileştirmede korunmalıdır.

Bu farklılıklar nedeniyle, tasarım zamanı serileştirmesi için farklı bir serileştirme modeli geçerlidir. Bu model, seri hale getirilen her veri türü için ayrı bir seri hale getirici nesnesi kullanır. Her seri hale getirici, soruna bir bütün olarak küçük bir katkı sağlar. Bu seri hale getiricilerin tümü ortak bir serileştirme yöneticisi aracılığıyla koordine edilir. Serileştirme yöneticisi, bu farklı seri hale getiriciler arasındaki durumu korumakla sorumludur. Örnek olarak aşağıdaki sınıfı göz önünde bulundurun:

public class SampleObject
{
    private string stringValue = null;
    private int intValue = int.MinValue;

    public string StringProperty 
    { 
        get { return this.stringValue; }

        set { this.stringValue = value; }
    }

    public int IntProperty 
    {
        get { return this.intValue; }

        set{ this.intValue = value; }
    }
}
Public Class SampleObject
   Private stringValue As String = Nothing
   Private intValue As Integer = Integer.MinValue
   
   
   Public Property StringProperty() As String
      Get
         Return Me.stringValue
      End Get 
      Set
         Me.stringValue = value
      End Set
   End Property 
   
   Public Property IntProperty() As Integer
      Get
         Return Me.intValue
      End Get 
      Set
         Me.intValue = value
      End Set
   End Property
End Class

Bu sınıfın bir örneği üç farklı seri hale getirici kullanır: biri için SampleObject, biri dizeler için, diğeri tamsayılar için. seri hale getirme grafiğinin kökü olduğundan SampleObject için SampleObject seri hale getirici kök seri hale getirici olarak adlandırılır. Daha karmaşık nesne grafikleri de oluşturulabilir. Örneğin, aşağıdaki gibi değiştirildiğinde ne olacağını SampleObject göz önünde bulundurun:

public class SampleObject
{
    private string stringValue = null;
    private int intValue = int.MinValue;
    private SampleObject childValue = null;

    public string StringProperty
    {
        get { return this.stringValue; }

        set { this.stringValue = value; }
    }

    public int IntProperty
    {
        get { return this.intValue; }

        set { this.intValue = value; }
    }

    public SampleObject Child
    {
        get { return this.childValue; }

        set { this.childValue = value; }
    }
}
Public Class SampleObject
   Private stringValue As String = Nothing
   Private intValue As Integer = Integer.MinValue
   Private childValue As SampleObject = Nothing
   
   
   Public Property StringProperty() As String
      Get
         Return Me.stringValue
      End Get 
      Set
         Me.stringValue = value
      End Set
   End Property 
   
   Public Property IntProperty() As Integer
      Get
         Return Me.intValue
      End Get 
      Set
         Me.intValue = value
      End Set
   End Property 
   
   Public Property Child() As SampleObject
      Get
         Return Me.childValue
      End Get 
      Set
         Me.childValue = value
      End Set
   End Property
End Class

Bu, kendisinin başka bir örneği olan bir alt öğeye sahip olmasını sağlar SampleObject . Aşağıdaki kod nesne grafını doldurur:

class Program
{
    static void Main(string[] args)
    {
        SampleObject root = new SampleObject();

        SampleObject currentObject = root;

        for (int i = 0; i < 10; i++)
        {
            SampleObject o = new SampleObject();

            currentObject.Child = o;

            currentObject = o;
        }
    }
}
Class Program
   
   Public Overloads Shared Sub Main()
      Main(System.Environment.GetCommandLineArgs())
   End Sub
   
   Overloads Shared Sub Main(args() As String)
      Dim root As New SampleObject()
      
      Dim currentObject As SampleObject = root
      
      Dim i As Integer
      For i = 0 To 9
         Dim o As New SampleObject()
         
         currentObject.Child = o
         
         currentObject = o
      Next i
   End Sub 
End Class

Seri hale getirildiğinde root , dört seri hale getirici kullanılır: bir kök serileştirici, alt SampleObjectiçin bir seri hale getirici, için intbir seri hale getirici ve için stringbir seri hale getirici. Seri hale getiriciler türüne göre önbelleğe alınır, bu nedenle her örneği SampleObjectiçin bir seri hale getirici oluşturmanız gerekmez.

DesignerSerializationManager sınıfı, serileştirme oturumu fikrini temel alır. Oturum, çeşitli seri hale getiriciler tarafından erişilebilen durumu korur. Bir oturum atıldığında, bu durum yok edilir. Bu, seri hale getiricilerin büyük ölçüde durum bilgisi olmayan kalmasını sağlamaya yardımcı olur ve bozuk seri hale getiricilerin temizlenmesine yardımcı olur. Aşağıdaki tablolarda, durumların oturumlarda ve oturumlar arasında nasıl yönetildiğini açıklanmaktadır.

Genel Durum

Bu durum serileştirme yöneticisi nesnesine aittir, ancak geçerli serileştirme oturumundan bağımsızdır.

Nesne Kullanım
Serileştirme sağlayıcıları Nesneler kendilerini özel serileştirme sağlayıcıları olarak ekleyebilir. Bu sağlayıcılar seri hale getiricileri bulmak için kullanıldığından, bir serileştirme oturumundan daha uzun yaşarlar.

Session-Owned Durumu

Bu durum bir oturuma aittir ve bir oturum yok edildiğinde yok edilir. Sonuç olarak, serileştirme yöneticisi etkin bir oturumda değilse, bu durumu işleyecek herhangi bir özellik veya yönteme erişmek bir özel durum oluşturur.

Nesne Kullanım
ResolveName Olay Olay ResolveName , adların ek çözümlemesini sağlamak için bir seri hale getirici tarafından eklenir. Bir oturum sonlandırıldığında tüm işleyiciler bu olaydan ayrılır.
SerializationComplete Olay Olay SerializationComplete , bir oturum atılmadan hemen önce oluşturulur. Ardından, tüm işleyiciler bu olaydan ayrılır.
Ad tablosu Serileştirme yöneticisi, nesneler ve adları arasında eşleyen bir tablo tutar. Seri hale getiriciler kolay tanımlama için nesnelere ad verebilir. Oturum sonlandırıldığında bu ad tablosu temizlenir.
Seri hale getirici önbelleği Serileştirme yöneticisi, sağlaması istenen seri hale getiricilerin önbelleğini tutar. Oturum sonlandırıldığında bu önbellek temizlenir. Ortak GetSerializer yöntem herhangi bir zamanda güvenli bir şekilde çağrılabilir, ancak değeri yalnızca bir oturum içinden çağrılırsa önbelleğe alınır.
Bağlam yığını Serileştirme yöneticisi, özelliğiyle erişebileceğiniz bağlam yığını adlı bir nesne tutar Context . Seri hale getiriciler diğer seri hale getiriciler için kullanılabilir ek bilgileri depolamak için bu yığını kullanabilir. Örneğin, bir özellik değerini seri hale getiren bir serileştirici, değerin seri hale getirilmesini istemeden önce özellik adını serileştirme yığınına gönderebilir. Oturum sonlandırıldığında bu yığın temizlenir.
Hata listesi Serileştirme yöneticisi, serileştirme sırasında oluşan hataların listesini tutar. Özelliği aracılığıyla Errors erişilen bu liste, oturum sonlandırıldığında temizlenir. Errors Oturumlar arasında özelliğe erişim bir özel durumla sonuçlanır.

Oluşturucular

DesignerSerializationManager()

DesignerSerializationManager sınıfının yeni bir örneğini başlatır.

DesignerSerializationManager(IServiceProvider)

Verilen hizmet sağlayıcısıyla sınıfının yeni bir örneğini DesignerSerializationManager başlatır.

Özellikler

Container

Bu serileştirme yöneticisi için kapsayıcıyı alır veya ayarlar.

Errors

Serileştirme veya seri durumdan çıkarma sırasında oluşan hataların listesini alır.

PreserveNames

Yöntemin kapsayıcıda belirtilen adın CreateInstance(Type, ICollection, String, Boolean) varlığını denetlemesi gerekip gerekmediğini belirten bir değer alır veya ayarlar.

PropertyProvider

Serileştirme yöneticisinin Properties özelliğine özellik sağlamak için kullanılması gereken nesneyi alır.

RecycleInstances

Her zaman yeni bir tür örneği oluşturup oluşturmayacağını CreateInstance(Type, ICollection, String, Boolean) belirten bir değer alır veya ayarlar.

ValidateRecycledTypes

Yöntemin eşleşen adların CreateInstance(Type, ICollection, String, Boolean) aynı türe başvurduğunu doğrulayıp doğrulamayacağını belirten bir değer alır veya ayarlar.

Yöntemler

CreateInstance(Type, ICollection, String, Boolean)

Türün bir örneğini oluşturur.

CreateSession()

Yeni bir serileştirme oturumu oluşturur.

Equals(Object)

Belirtilen nesnenin geçerli nesneye eşit olup olmadığını belirler.

(Devralındığı yer: Object)
GetHashCode()

Varsayılan karma işlevi işlevi görür.

(Devralındığı yer: Object)
GetRuntimeType(String)

Belirtilen tür adına karşılık gelen türü alır.

GetSerializer(Type, Type)

Verilen nesne türü için seri hale getiriciyi alır.

GetService(Type)

İstenen hizmeti alır.

GetType()

Type Geçerli örneğini alır.

(Devralındığı yer: Object)
GetType(String)

İstenen türü alır.

MemberwiseClone()

Geçerli Objectöğesinin sığ bir kopyasını oluşturur.

(Devralındığı yer: Object)
OnResolveName(ResolveNameEventArgs)

Olayı tetikler ResolveName .

OnSessionCreated(EventArgs)

Olayı tetikler SessionCreated .

OnSessionDisposed(EventArgs)

Olayı tetikler SessionDisposed .

ToString()

Geçerli nesneyi temsil eden dizeyi döndürür.

(Devralındığı yer: Object)

Ekinlikler

SessionCreated

Oturum oluşturulduğunda gerçekleşir.

SessionDisposed

Bir oturum atıldığında gerçekleşir.

Belirtik Arabirim Kullanımları

IDesignerSerializationManager.AddSerializationProvider(IDesignerSerializationProvider)

Serileştirme yöneticisine özel bir serileştirme sağlayıcısı ekler.

IDesignerSerializationManager.Context

Bu serileştirme oturumu için bağlam yığınını alır.

IDesignerSerializationManager.CreateInstance(Type, ICollection, String, Boolean)

CreateInstance(Type, ICollection, String, Boolean) yöntemini uygular.

IDesignerSerializationManager.GetInstance(String)

Belirtilen adda oluşturulan bir nesnenin örneğini alır.

IDesignerSerializationManager.GetName(Object)

Belirtilen nesne için bir ad alır.

IDesignerSerializationManager.GetSerializer(Type, Type)

Belirtilen nesne türü için istenen türde bir seri hale getirici alır.

IDesignerSerializationManager.GetType(String)

Belirtilen adın türünü alır.

IDesignerSerializationManager.Properties

özelliğini uygular Properties .

IDesignerSerializationManager.RemoveSerializationProvider(IDesignerSerializationProvider)

Daha önce eklenmiş bir serileştirme sağlayıcısını kaldırır.

IDesignerSerializationManager.ReportError(Object)

Serileştirmede kurtarılabilir bir hata bildirmek için kullanılır.

IDesignerSerializationManager.ResolveName

Serileştirme yöneticisinin ad tablosunda belirtilen adı bulamadığınızda IDesignerSerializationManager.GetName(Object) gerçekleşir.

IDesignerSerializationManager.SerializationComplete

Serileştirme tamamlandığında gerçekleşir.

IDesignerSerializationManager.SetName(Object, String)

Belirtilen nesnenin adını ayarlar.

IServiceProvider.GetService(Type)

Bu üyenin açıklaması için yöntemine GetService(Type) bakın.

Şunlara uygulanır

Ayrıca bkz.