Anvisningar: Skapa en anpassad beständighetsdeltagare
Följande procedur innehåller steg för att skapa en beständig deltagare. Se avsnittet Delta i beständighetsexempel och Lagra utökningsbarhet för exempelimplementeringar av beständighetsdeltagare.
Skapa en klass som härleds från PersistenceParticipant klassen eller PersistenceIOParticipant . Klassen PersistenceIOParticipant erbjuder samma utökningspunkter som klassen PersistenceParticipant förutom att kunna delta i I/O-åtgärder. Följ ett eller flera av följande steg.
CollectValues Implementera metoden. Metoden CollectValues har två ordlisteparametrar, en för att lagra läs-/skrivvärden och den andra för lagring av skrivskyddade värden (används senare i frågor). I den här metoden bör du fylla i dessa ordlistor med data som är specifika för en beständig deltagare. Varje ordlista innehåller namnet på värdet som nyckel och själva värdet som ett InstanceValue objekt.
Värdena i ordlistan readWriteValues paketeras som InstanceValue-objekt . Värdena i ordlistan med skrivskydd paketeras som InstanceValue-objekt med InstanceValueOptions.Optional och InstanceValueOption.WriteOnly angivna. Varje InstanceValue som tillhandahålls av CollectValues-implementeringarna för alla beständighetsdeltagare måste ha ett unikt namn.
protected virtual void CollectValues(out IDictionary<XName,Object> readWriteValues, out IDictionary<XName,Object> writeOnlyValues) { }
MapValues Implementera metoden. Metoden MapValues tar två parametrar som liknar de parametrar som metoden CollectValues tar emot. Alla värden som samlas in i CollectValues-fasen skickas via dessa ordlisteparametrar. De nya värden som läggs till av MapValues-fasen läggs till i skrivskyddade värden. Ordlistan endast skrivskydd används för att tillhandahålla data till en extern källa som inte är direkt associerad med instansvärdena. Varje värde som tillhandahålls av implementeringar av Metoden MapValues för alla beständighetsdeltagare måste ha ett unikt namn.
protected virtual IDictionary<XName,Object> MapValues(IDictionary<XName,Object> readWriteValues,IDictionary<XName,Object> writeOnlyValues) { }
Metoden MapValues tillhandahåller funktioner som CollectValues inte gör det, eftersom den möjliggör ett beroende av ett annat värde som tillhandahålls av en annan beständig deltagare som inte har bearbetats av CollectValues ännu.
Implementera metoden PublishValues. Metoden PublishValues tar emot en ordlista som innehåller alla värden som läses in från beständighetsarkivet.
protected virtual void PublishValues(IDictionary<XName,Object> readWriteValues) { }
Implementera metoden BeginOnSave om deltagaren är en beständig I/O-deltagare. Den här metoden anropas under en Spara-åtgärd. I den här metoden bör du utföra I/O-tillägg till de bevarade (sparande) arbetsflödesinstanserna. Om värden använder en transaktion för motsvarande beständighetskommando anges samma transaktion i Transaction.Current. Dessutom kan PersistenceIOParticipants annonsera ett krav på transaktionskonsekvens, i vilket fall värden skapar en transaktion för beständighetsavsnittet om man annars inte skulle användas.
protected virtual IAsyncResult BeginOnSave(IDictionary<XName,Object> readWriteValues, IDictionary<XName,Object> writeOnlyValues, TimeSpan timeout, AsyncCallback callback, Object state) { }
Implementera metoden BeginOnLoad om deltagaren är en beständig I/O-deltagare. Den här metoden anropas under en inläsningsåtgärd. I den här metoden bör du utföra I/O-tillägg till inläsningen av arbetsflödesinstanser. Om värden använder en transaktion för motsvarande beständighetskommando anges samma transaktion i Transaction.Current. Dessutom kan persistence I/O-deltagare annonsera ett krav på transaktionskonsekvens, i vilket fall värden skapar en transaktion för beständighetsavsnittet om man annars inte skulle användas.
protected virtual IAsyncResult BeginOnLoad(IDictionary<XName,Object> readWriteValues, TimeSpan timeout, AsyncCallback callback, Object state) { }