Думаю кто работал с данным фреймворком не нужно объяснять что такое сервисы в Catel, и для чего они используются.
Но, после многочасовой работой с классами c++ в голову стукнула дурная мысль, отказаться от сервисов Catel, и пользоваться запечатаными, SingleInstance классами, что в свою очередь так же обеспечит доступ к ним из любой модели, вью модели. Стоит ли так делать? И что может пойти не так?
UPD.
Добавлю пример почему мне еще приходит данная мысль в голову.
Приложение само по себе SingleInstance, и при запуске нового экземпляра, передает все полученные аргументы в "обработчик", в котором есть event оповещающий о новых параметрах, или какой-то команды.
Все бы не плохо, имеется интерфейс, имеется сервис, все хорошо. Но, когда мы добавляем сервис в тот или иной класс модели/вью модели, то вот тут то и наступает небольшой конфликт. Интерфейс не может содержать делегаты, которые в свою очередь иногда нужны.
UPD.
Примеры реализаций:
Запечатаный класс
public sealed class ResolvedFromInstance
{
public delegate void MakeResolvedData(object sender, IList<string> args);
private static ResolvedFromInstance _instance;
private ResolvedFromInstance()
{
ResolvedFromInstance.Instance.OnMakeResolvedData(new List<string>());
}
public static ResolvedFromInstance Instance
{
get { return _instance ?? (_instance = new ResolvedFromInstance()); }
}
public event MakeResolvedData MakedResolvedData;
public void OnMakeResolvedData(IList<string> args)
{
MakedResolvedData?.Invoke(this, args);
}
}
Сервис/класс и интерфейс
public interface IResolvedFromInstance
{
event ResolvedFromInstance.MakeResolvedData MakedResolvedData;
bool WriteMessageStack(IList<string> args);
void OnMessagesWrited(IList<string> args);
}
public class ResolvedFromInstance: IResolvedFromInstance
{
public delegate void MakeResolvedData(object sender, IList<string> args);
public event MakeResolvedData MakedResolvedData;
public bool WriteMessageStack(IList<string> args)
{
OnMessagesWrited(args);
return true;
}
public virtual void OnMakeResolvedData(IList<string> args)
{
MakedResolvedData?.Invoke(this, args);
}
}
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости