ICustomExtractDriver Interface

When implemented, represents a custom driver used to write data to/read data from a data extract.

Namespace: DevExpress.DashboardCommon

Assembly: DevExpress.Dashboard.v21.2.Core.dll


public interface ICustomExtractDriver


ICustomExtractDriver allows you to implement a custom logic for writing/reading data extracts (DashboardExtractDataSource). To facilitate these operations, a data extract is divided into special chunks called pages. Each page within a data extract can be accessed by a unique identifier (GUID).

The ICustomExtractDriver interface exposes two methods to be implemented.

After you have implemented a custom driver, you can substitute a default extract driver using the ExtractDriverStorage.DefaultDriver property. In this case, a new driver will be used for all data extracts. As an alternative, you can use a new driver for the specific data extract. To do this, register a custom driver within the ExtractDriverStorage by calling the ExtractDriverStorage.RegisterCustomDriver method. Then, assign the name of this driver to the DashboardExtractDataSource.DriverName property.


This example demonstrates how to create a custom driver to encrypt/decrypt extract data. It implements the ICustomExtractDriver interface:

View Example: How to Encrypt/Decrypt Data Transfer Between the Data Extract File and a Dashboard

using System;
using System.Collections.Generic;
using System.Security.Cryptography;
using DevExpress.DashboardCommon;

namespace Dashboard_CustomExtractDriver {
    public class ExtractEncryptionDriver : ICustomExtractDriver {

        public IDriverReadSession CreateReadSession(string resourceName) {
            return new EncryptionReadSession(FileExtractDriver.Instance.CreateReadSession(resourceName));
        public IDriverWriteSession CreateWriteSession(string resourceName) {
            return new EncryptionWriteSession(FileExtractDriver.Instance.CreateWriteSession(resourceName));

    public class EncryptionWriteSession : IDriverWriteSession {
        IDriverWriteSession writeSession;

        public EncryptionWriteSession(IDriverWriteSession writeSession) {
            this.writeSession = writeSession; 
        public void Dispose() {
        public void SetPage(Guid pageID, byte[] data) {
            writeSession.SetPage(pageID, Encrypt(data));
        byte[] Encrypt(byte[] page) {
            byte[] entropy = { 1, 2, 3 };
            byte[] encryptedPage = ProtectedData.Protect(page, entropy, DataProtectionScope.CurrentUser);
            return encryptedPage;

    public class EncryptionReadSession : IDriverReadSession {
        IDriverReadSession readSession;
        public EncryptionReadSession(IDriverReadSession readSession) {
            this.readSession = readSession;
        public void Dispose() {
        byte[] Decrypt(byte[] page) {
            byte[] entropy = { 1, 2, 3 };
            byte[] decryptedPage = ProtectedData.Unprotect(page, entropy, DataProtectionScope.CurrentUser);
            return decryptedPage;
        public byte[] GetPage(Guid pageID) {
            return Decrypt(readSession.GetPage(pageID));
        public IEnumerable<Guid> GetPageIDs() {
            return readSession.GetPageIDs();

The following code snippet (auto-collected from DevExpress Examples) contains a reference to the ICustomExtractDriver interface.


The algorithm used to collect these code examples remains a work in progress. Accordingly, the links and snippets below may produce inaccurate results. If you encounter an issue with code examples below, please use the feedback form on this page to report the issue.

See Also