В данном примере отдельный AppModule можно не создавать. В данном примере функцию AppModule выполняет платформенно-независимый модуль приложения. Выполните следующее:

 

public sealed partial class DemoAppModule : ModuleBase

{

    private readonly SecurityStrategyComplex _securityStrategy;

 

    public DemoAppModule()

    {

        …

        var authentication = new AuthenticationActiveDirectory();

        authentication.CreateUserAutomatically = true;

        authentication.LogonParametersType = null;

        _securityStrategy = new SecurityStrategyComplex();

        _securityStrategy.Authentication = authentication;

        _securityStrategy.RoleType = typeof(SecuritySystemRole);

        _securityStrategy.UserType = typeof(SecuritySystemUser);

    }

 

    public override void Setup(XafApplication application) {

        base.Setup(application);

        Application.ApplicationName = "DemoApp";

        Application.Security = _securityStrategy;

        Application.CustomizeLanguagesList +=

            Application_CustomizeLanguagesList;

        Application.CreateCustomObjectSpaceProvider +=

            Application_CreateCustomObjectSpaceProvider;

        Application.DatabaseVersionMismatch +=

            DemoAppWindowsFormsApplication_DatabaseVersionMismatch;

    }

 

    private void DemoAppWindowsFormsApplication_DatabaseVersionMismatch(

        object sender, DatabaseVersionMismatchEventArgs e)

    {

        e.Updater.Update();

        e.Handled = true;

    }

 

    private void Application_CreateCustomObjectSpaceProvider(

        object sender, CreateCustomObjectSpaceProviderEventArgs e)

    {

        if (e.ObjectSpaceProvider == null)

        {

            var app = (XafApplication) sender;

            var security = (SecurityStrategy) app.Security;

            e.ObjectSpaceProvider = new SecuredObjectSpaceProvider(

                security, e.ConnectionString, e.Connection);

        }

    }

 

    private void Application_CustomizeLanguagesList(

        object sender, CustomizeLanguagesListEventArgs e)

    {

        string userLanguageName = Thread.CurrentThread.CurrentUICulture.Name;

        if (userLanguageName != "en-US" &&

            e.Languages.IndexOf(userLanguageName) == -1)

        {

            e.Languages.Add(userLanguageName);

        }

    }

}

 

Как видно из кода, в конструкторе класса выполняется настройка подсистемы безопасности.

Для работы сервера расчетов Xafari необходимо:

использовать DevExpress.ExpressApp.Security.SecurityStrategyComplex.

Весь код, выполняющий те же функции в классе DemoApp.Win.WinApplication, следует удалить из класса DemoApp.Win.WinApplication.