Существует ситуация, когда наследование типа Настройки приводит к ошибке при запуске приложения. Это произойдет, если класс-предок определен в другом модуле. Ситуация рассмотрена на простом примере. Перед дальнейшим чтением, рекомендуется ознакомится с разделом Проектирование Настроек.

Пусть интерфейс ISettingSupport определен в модуле Module1, определение представлено в нижеследующем фрагменте кода:

 

    [DomainComponent]

    [NonPersistentDc]

    public interface ISettingSupport

    {

        string SettingSupport { getset; }

    }

 

Персистентный тип IDCSetting происходит от ISettingSupport и определен в модуле Module2:

 

    [DomainComponent]

    public interface IDCSetting : ISettingSupport

    {

        string Name { getset; }

    }

 

Там же, в модуле Module2, определена Настройка PesistentObject типа IPesistentObject:

 

    public interface ISettingsValues

    {

    IPesistentObject PesistentObject{ get; }

    }

 

    public interface IPesistentObject : IModelBCSettingsObjectItem<IDCSetting>{}

 

    [DomainLogic(typeof(IPesistentObject))]

    public class IPesistentObjectLogic : IModelBCSettingsXPObjectItemLogic<IDCSettingIPesistentObject>

    {

    public IPesistentObjectLogic(IPesistentObject instance) : base(instance) { }

    }

 

Можно попытаться запустить приложение и убедится в том, что возникнет ошибка следующего содержания:

 

Такое поведение обусловлено особенностями внутренней реализации BC Settings. Тем не менее ошибки можно избежать, если поступить следующим образом:

Модифицировать интерфейс ISettingsValues, определив фиктивную Настройку Fictitious типа ISettingSupport. Это продемонстрировано в следующем коде:

 

    public interface ISettingsValues

    {

        [Browsable(false)]

        ISettingSupport Fictitious { get; }

 

        IPesistentObject PesistentObject { get; }

    }

 

Этого будет достаточно для корректной работы приложения.