Я столкнулся с описанием шаблона "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
. Я что-то пропустил?