public interface IModdedChivalry2Launcher { public Either Launch(ModdedLaunchOptions launchOptions, IEnumerable args); } public class ModdedChivalry2Launcher: IModdedChivalry2Launcher { private IProcessLauncher Launcher { get; } private string WorkingDirectory { get; } private IModManager ModManager { get; } public ModdedChivalry2Launcher(IProcessLauncher, launcher, string workdir, IModManager modManager) { Launcher = launcher; WorkingDirectory = workdir; ModManager = modManager; } public Either Launch(ModdedLaunchOptions launchOptions, IEnumerable args) { // ... impl ... } } public class SomeViewModel { // ... private IModdedChivalry2Launcher Launcher { get; } public SomeViewModel(IModdedChivalry2Launcher launcher) { Launcher = launcher; } public void SomeLauncherInvokingFunction() { // ... Launcher.Launch(foo, bar); // ... } }