It is always difficult for me to choose between singular and plural forms for classes names:


CustomerRepository vs. CustomersRepository
CustomerService vs. CustomersService
CustomerController vs. CustomersController



And for composite names it is even more difficult:


  OrderCustomerRepository vs. OrderCustomersRepository vs.
  OrdersCustomersRepository


What approach do you prefer and why?

The only thing I pluralize is collections.  

foreach (var customer in customers)
{
    // do something with customer
}


All of your examples are individual objects, so they are not pluralized.  Yes, the names refer to objects that might have multiple instances, but all you need to know in the name is the object entity (i.e. customer).

So in all of your examples, the singular is the correct form.  Makes life much easier.
