I came across "Stairway" pattern description in the "Adaptive code via C#" book and I don't really understand how this is supposed to be implemented:
(source)
So I have client assembly:
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();
}
}
}
Service interface assembly:
namespace Service
{
public interface IService
{
void Do();
}
}
And service implementation assembly:
using ServiceInterface;
namespace ServiceImplementation
{
public class PrintService : IService
{
public void Do()
{
Console.WriteLine("Some work done");
}
}
}
And the question is: how to I get an IService
object in the Client
namespace? Where shall I place actual new PrintService()
object creation? This can't be a part of ServiceInterface
, because interface assembly doesn't depend on ServiceImplementation
. But it also can't be a part of Client
or ServiceImplementation
because Client
should only depend on ServiceInterface
.
The only solution I came to is having Application
assembly on top of it, which has references to all three (Client
, ServiceInterface
and ServiceImplementation
) and injects IService
into Client
. Am I missing something?