Ниже приведен пример описания сервиса с сервисным методом ServiceMethod() и расширения (extension) для него. При этом использован специальный шаблон в Visual Studio для создания новых XS.

Описываемый пример доступен для скачивания: CustomXafariServices

 

public class CustomService : XafariServiceBase<CustomServiceCustomService.ServiceContext>
{
 public class ServiceContext : ServiceSpaceContextBase
 {
         protected override void Rollback()
         {
                 // Add here code to implement service rollback operation
         }
         protected override void CommitChanges()
         {
                 // Add here code to implement service commit changes operation
         }
         protected override void Initialize()
         {
                 base.Initialize();
         }
         public void ServiceMethod()
         {
         // Add here code to implement any service method.
         }
 }
 
 protected override void SetupServiceContext(ServiceContext serviceContext)
 {
         base.SetupServiceContext(serviceContext);
 }
 public override void Setup(XafApplication application)
 {
         base.Setup(application);
 }
}
public static class CustomServiceExtensions
{
 public static CustomService.ServiceContext CustomService(this IObjectSpace objectSpace)
 {
         return objectSpace
                 .ServiceSpace()
                 .FindServiceContext<CustomService.ServiceContext>(CustomService.Instance);
 }
}

 

Ниже приведен пример вызова сервисного метода ServiceMethod() при помощи extension.

 

private void simpleAction1_Execute(object sender, SimpleActionExecuteEventArgs e)
{
 this.ObjectSpace.CustomService().ServiceMethod();
 this.ObjectSpace.CommitChanges();
}

 

При таком вызове происходит следующее:

Работа с объектами IServiceSpace

Ниже приведен код, показывающий как использовать несколько объектов IServiceSpace для одного объекта IObjectSpace.

 

private void simpleAction2_Execute(object sender, SimpleActionExecuteEventArgs e)
{
 using (var objectSpace = this.Application.CreateObjectSpace())
 {
         using (var serviceSpace = objectSpace.ServiceSpace())
         {
                 // any code
                 serviceSpace.CommitChanges();
         }
         using (var serviceSpace = objectSpace.ServiceSpace())
         {
                 // any code
                 serviceSpace.Rollback();
         }
 }
}