DevExpress XpoHelper Connection Register Types

Date: 2024-01-29
using DevExpress.ExpressApp;
using DevExpress.ExpressApp.Xpo;
using DevExpress.Xpo;
using System;
using System.Linq;

public static class XpoHelper
{
    private static System.Reflection.Assembly[] _assemblies;
    public static void Register(params System.Reflection.Assembly[] assemblies)
    {
        _assemblies = assemblies;
    }

    public static Session GetNewSession()
    {
        var session = new Session(DataLayer);
        session.TrackPropertiesModifications = false;
        return session;
    }

    public static UnitOfWork GetNewUnitOfWork()
    {
        return new UnitOfWork(DataLayer);
    }

    public static XPObjectSpaceProvider ObjectSpaceProvider { get; private set; }
    public static IObjectSpace DefaultObjectSpace { get; private set; }
    public static IDataLayer DataLayer { get; private set; }

    public static IDataLayer CreateDataLayer(string connectionString)
    {
        if (_assemblies == null) throw new Exception("XpoHelper.types is null. Please use XpoHelper.Register before using any other function from the XpoHelper class.");

        const int maxConnections = 3;
        var connectionPoolString = XpoDefault.GetConnectionPoolString(connectionString, maxConnections);
        var dataStoreProvider = new ConnectionStringDataStoreProvider(connectionPoolString, true);

        var allTypes = _assemblies.SelectMany(a => a.GetTypes().Where(x => typeof(XPBaseObject).IsAssignableFrom(x))).ToList();
        var xpoTypeInfoSource = XpoTypesInfoHelper.GetXpoTypeInfoSource();
        allTypes.ForEach(x => xpoTypeInfoSource.RegisterEntity(x));
        var typesInfo = XpoTypesInfoHelper.GetTypesInfo();

        ObjectSpaceProvider = new XPObjectSpaceProvider(dataStoreProvider, typesInfo, xpoTypeInfoSource, true);
        DefaultObjectSpace = ObjectSpaceProvider.CreateObjectSpace();
        DataLayer = ObjectSpaceProvider.DataLayer;
        return DataLayer;
    }
}
82160cookie-checkDevExpress XpoHelper Connection Register Types