Out of the box ASP.NET MVC does not support dependency injection like the newer ASP.NET Core runtime does. Therefore your controllers cannot require any parameters. That also means your controllers are responsible for creating any "services" that they need. This is a maintenance nightmare and not recommended.
It is generally recommended that you set up DI for your project so that your controllers can accept parameters. DI frameworks hook into the creation of controllers and are able to create controllers with parameters. You configure your dependencies at app startup and the DI container handles everything from there. All DI libraries support ASP.NET MVC so you just need to pick one, download the NuGet package for it and follow the steps it gives to hook things up. As an example Autofac is one that I've traditionally used for an MVC app.
//App startup
var builder = new ContainerBuilder();
//Register Autofac to handle MVC and API Controller creation
builder.RegisterControllers(Assembly.GetExecutingAssembly());
builder.RegisterApiControllers(Assembly.GetExecutingAssembly());
//Register any types you want to be able to pass to controllers (or dependencies of controllers)
builder.RegisterType<MyService>().AsSelf();
//After you have registered everything you have to hook it up to the MVC & API infrastructure
var container = builder.Build();
DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
config.DependencyResolver = new AutofacWebApiDependencyResolver(container); //config is the HttpConfiguration
Now you can use parameterized controllers (and actually any types), just make sure each type that is used is registered in the container
public class MyController : Controller
{
public MyController ( MyService service )
{
}
}