Delen via


Procedure: Een aangepaste persistentiedeelnemer maken

De volgende procedure bevat stappen om een persistentiedeelnemer te maken. Zie het onderwerp Deelnemen aan persistentievoorbeeld en Uitbreidbaarheid opslaan voor voorbeeldimplementaties van persistentiedeelnemers.

  1. Maak een klasse die is afgeleid van de PersistenceParticipant of de PersistenceIOParticipant klasse. De klasse PersistenceIOParticipant biedt dezelfde uitbreidbaarheidspunten als de klasse PersistenceParticipant, naast het kunnen deelnemen aan I/O-bewerkingen. Volg een of meer van de volgende stappen.

  2. Implementeer de CollectValues methode. De methode CollectValues heeft twee woordenlijstparameters, één voor het opslaan van lees-/schrijfwaarden en de andere voor het opslaan van alleen-schrijven-waarden (later in query's). In deze methode moet u deze woordenlijsten vullen met gegevens die specifiek zijn voor een persistentiedeelnemer. Elke woordenlijst bevat de naam van de waarde als de sleutel en de waarde zelf als een InstanceValue object.

    De waarden in de woordenlijst readWriteValues zijn verpakt als InstanceValue-objecten . De waarden in de woordenlijst met alleen-schrijven zijn verpakt als InstanceValue-objecten met InstanceValueOptions.Optional en InstanceValueOption.WriteOnly ingesteld. Elke InstanceValue die wordt geleverd door de CollectValues-implementaties voor alle persistentiedeelnemers , moet een unieke naam hebben.

    protected virtual void CollectValues(out IDictionary<XName,Object> readWriteValues, out IDictionary<XName,Object> writeOnlyValues)
    {
    }
    
  3. Implementeer de MapValues methode. De Methode MapValues gebruikt twee parameters die vergelijkbaar zijn met de parameters die de methode CollectValues ontvangt. Alle waarden die in de fase CollectValues worden verzameld, worden doorgegeven via deze woordenlijstparameters. De nieuwe waarden die door de MapValues-fase worden toegevoegd, worden toegevoegd aan de alleen-schrijven-waarden. De woordenlijst met alleen-schrijven wordt gebruikt om gegevens te leveren aan een externe bron die niet rechtstreeks is gekoppeld aan de exemplaarwaarden. Elke waarde die wordt geleverd door implementaties van de Methode MapValues voor alle persistentiedeelnemers , moet een unieke naam hebben.

    protected virtual IDictionary<XName,Object> MapValues(IDictionary<XName,Object> readWriteValues,IDictionary<XName,Object> writeOnlyValues)
    {
    }
    

    De MapValues methode biedt functionaliteit die CollectValues niet mogelijk is, omdat het een afhankelijkheid toestaat van een andere waarde die wordt geleverd door een andere persistentiedeelnemer die nog niet is verwerkt CollectValues .

  4. Implementeer de methode PublishValues . De methode PublishValues ontvangt een woordenlijst met alle waarden die uit het persistentiearchief zijn geladen.

    protected virtual void PublishValues(IDictionary<XName,Object> readWriteValues)
    {
    }
    
  5. Implementeer de Methode BeginOnSave als de deelnemer een persistentie-I/O-deelnemer is. Deze methode wordt aangeroepen tijdens een bewerking Opslaan. In deze methode moet u I/O-assistent uitvoeren voor de persistente (opgeslagen) werkstroomexemplaren. Als de host een transactie gebruikt voor de bijbehorende persistentieopdracht, wordt dezelfde transactie geleverd in Transaction.Current. Bovendien kan PersistenceIOParticipants een transactionele consistentievereiste adverteren. In dat geval maakt de host een transactie voor de persistentie-aflevering als deze anders niet zou worden gebruikt.

    protected virtual IAsyncResult BeginOnSave(IDictionary<XName,Object> readWriteValues, IDictionary<XName,Object> writeOnlyValues, TimeSpan timeout, AsyncCallback callback, Object state)
    {
    }
    
  6. Implementeer de Methode BeginOnLoad als de deelnemer een persistentie-I/O-deelnemer is. Deze methode wordt aangeroepen tijdens een belastingbewerking. In deze methode moet u I/O-assistent uitvoeren voor het laden van werkstroomexemplaren. Als de host een transactie gebruikt voor de bijbehorende persistentieopdracht, wordt dezelfde transactie geleverd in Transaction.Current. Bovendien kunnen I/O-deelnemers aan persistentie een transactionele consistentievereiste adverteren. In dat geval maakt de host een transactie voor de persistentie-aflevering als deze anders niet zou worden gebruikt.

    protected virtual IAsyncResult BeginOnLoad(IDictionary<XName,Object> readWriteValues, TimeSpan timeout, AsyncCallback callback, Object state)
    {
    }