The Separated Interface pattern addresses the problem of separating the interface that describes the functionalities from its implementation. The pattern prescribes that you use different packages (assemblies in the .NET Framework) for the interface and any of its implementations. The packages that need to consume the functionalities know only the definition of the interface and are completely unaware of the implementation.

In the example above the Vehicle assembly uses the IEngine interface provided by the EngineInterface assembly. The concrete implementation of the IEngine interface are in separated assemblies (NormalEngine, TurboEngine and ElectricEngine). In this way the Vehicle assembly knows only the EngineInterface assembly and is totally indipendent from its concrete implementation. By doing so, change the "Engine" to the "Vehicle" is simple as to change the referenced assembly.
3e25b88c-595e-4062-865b-e99f996f5643|0|.0