Я прихожу к этому вопросу, изучая инфраструктуру XNA, но я бы хотел получить общее понимание.
ISomeService someService = (ISomeService)Game.GetServices(typeof(ISomeService));
а затем мы делаем что-то с любыми функциями/свойствами в интерфейсе:
someService.DoSomething(); // let say not a static method but doesn't matter
Я пытаюсь понять, почему такая реализация лучше, чем:
myObject = InstanceFromComponentThatWouldProvideTheService();
myObject.DoSomething();
Когда вы используете способ предоставления услуг для своего интерфейса, вы действительно получаете экземпляр компонента, который предоставляет услугу в любом случае. Правильно? У вас не может быть "экземпляр" интерфейса. И есть только один класс, который может быть поставщиком услуги. Итак, у вас действительно есть экземпляр вашего класса компонентов, с той лишь разницей, что у вас есть только доступ к подмножеству компонента-объекта (любое подмножество находится в интерфейсе).
Как это отличается от обычных и частных методов и свойств? Другими словами, общедоступные методы/свойства компонента являются "интерфейсом", и мы можем остановиться со всей этой обходной способностью. Вы все равно можете изменить способ реализации этого "интерфейса", не нарушая ничего (пока вы не измените подпись метода, но это также нарушит реализацию служб).
И в любом случае связь между компонентом и службой будет 1-к-1 (более одного класса не может зарегистрироваться, чтобы быть поставщиком услуги), и я не вижу, как класс провайдер более чем одной услуги (srp и все такое).
Итак, я предполагаю, что я пытаюсь выяснить, в чем проблема, которую этот тип рамок должен решить. Что мне не хватает?