CompositeObjectSpace.AdditionalObjectSpaces Property
Gets the list of Object Spaces used to handle objects that do not belong to the current Object Space. We recommend that you call the PopulateAdditionalObjectSpaces(XafApplication) method to populate this collection automatically.
Namespace: DevExpress.ExpressApp
Assembly: DevExpress.ExpressApp.v24.1.dll
NuGet Package: DevExpress.ExpressApp
Declaration
Property Value
Type | Description |
---|---|
IList<IObjectSpace> | An IList<T> collection of Object Spaces used to handle objects that do not belong to the current Object Space. |
Exceptions
Type | Description |
---|---|
InvalidOperationException | Cannot add the Object Space to the CompositeObjectSpace.AdditionalObjectSpaces collection because another Object Space for the same object types already exists. |
Remarks
Use one of the following techniques to fill this collection.
Automatically: Use PopulateAdditionalObjectSpaces (Recommended technique)
- Handle the
OnObjectSpaceCreated
event in the Application Builder code in the application’sStartup.cs
file. - In the event handler, call the PopulateAdditionalObjectSpaces(IObjectSpaceProviderService, IObjectSpaceCustomizerService) method to populate the
AdditionalObjectSpaces
collection with all necessary Object Spaces.
File: MySolution.Blazor.Server/Startup.cs, MySolution.Win/Startup.cs, MySolution.WebApi/Startup.cs
using DevExpress.ExpressApp;
//...
builder.ObjectSpaceProviders.Events.OnObjectSpaceCreated = context => {
CompositeObjectSpace compositeObjectSpace = context.ObjectSpace as CompositeObjectSpace;
if (compositeObjectSpace != null) {
if (!(compositeObjectSpace.Owner is CompositeObjectSpace)) {
var objectSpaceProviderService = context.ServiceProvider.GetRequiredService<IObjectSpaceProviderService>();
var objectSpaceCustomizerService = context.ServiceProvider.GetRequiredService<IObjectSpaceCustomizerService>();
compositeObjectSpace.PopulateAdditionalObjectSpaces(objectSpaceProviderService, objectSpaceCustomizerService);
}
}
}
Manually: Create Object Spaces and Add Them to the Collection
If you need to create an additional Object Space manually, follow the steps below:
- Handle the
OnObjectSpaceCreated
event in the Application Builder code in the application’s Startup.cs file. - In the event handler, access NonPersistentObjectSpace and use its IsKnownType(Type, Boolean) method to ensure that the
AdditionalObjectSpaces
collection does not already include a compatible Object Space.
File: MySolution.Blazor.Server/Startup.cs, MySolution.Win/Startup.cs, MySolution.WebApi/Startup.cs
using DevExpress.ExpressApp;
// ...
builder.ObjectSpaceProviders.Events.OnObjectSpaceCreated = context => {
var nonPersistentObjectSpace = context.ObjectSpace as NonPersistentObjectSpace;
if (nonPersistentObjectSpace != null) {
if (!nonPersistentObjectSpace.IsKnownType(typeof(Person), true)) {
IObjectSpace additionalObjectSpace = context.ServiceProvider.GetRequiredService<IObjectSpaceFactory>()
.CreateObjectSpace<Person>();
// Customize the additionally created Object Space.
nonPersistentObjectSpace.AdditionalObjectSpaces.Add(additionalObjectSpace);
nonPersistentObjectSpace.Disposed += (s2, e2) => {
additionalObjectSpace.Dispose();
};
}
}
};
// ...