I think better oo design would be
public class UserRegistry {
public void Register(User user) {...}
}
or
public class MyApplicationClient {
public void Register(User user) {...}
}
Even better might be (probably an overkill, and does not work for your case at all):
public class UserRegistrar {
public void Register(User user, IUserRegistry userRegistry) {...}
}
public class MyApplicationClient : IUserRegistry {}
public IUserRegistry {
// Add, Remove, IsRegistered
}
Your first option could translate in English as:
"A registration that can register a user." But registration (record) is a product of registration (process).
Second option requires user to know context it to be registered in, you don't say "hey, user - go register yourself with that department." you say "hey department, here is a user - register him."
So method Register() shall act on user, user is being registered, it shall not contain details on how it is registered (simple test: registration can be different depending on the context user is to be registered in, therefore user shall be agnostic to details of registration).