Я столкнулся с описанием шаблона "Stairway" в книге "Adaptive code via С#", и я действительно не понимаю, как это должно быть реализовано:
(source)
Итак, у меня есть клиентская сборка:
using ServiceInterface;
namespace Client
{
class Program
{
static void Main(string[] args)
{
// Have to create service implementation somehow
// Where does ServiceFactory belong?
ServiceFactory serviceFactory = new ServiceFactory();
IService service = serviceFactory.CreateService();
service.Do();
}
}
}
Сборка интерфейса службы:
namespace Service
{
public interface IService
{
void Do();
}
}
И сборка службы:
using ServiceInterface;
namespace ServiceImplementation
{
public class PrintService : IService
{
public void Do()
{
Console.WriteLine("Some work done");
}
}
}
И возникает вопрос: как получить объект IService в пространстве имен Client? Где я должен разместить фактическое создание объекта new PrintService()? Это не может быть частью ServiceInterface, поскольку сборка интерфейса не зависит от ServiceImplementation. Но он также не может быть частью Client или ServiceImplementation, потому что Client должен зависеть только от ServiceInterface.
Единственное решение, с которым я пришел, - это иметь сборку Application поверх нее, которая имеет ссылки на все три (Client, ServiceInterface и ServiceImplementation) и вставляет IService в Client. Я что-то пропустил?