Unity allows to create a singleton with:
this.UnityContainer.RegisterType<MyClass>(new ContainerControlledLifetimeManager());
var instance = this.UnityContainer.Resolve<MyClass>();
The access to the MyClass's constructor must be public to allow the container to be able to create a new instance (for another project like a module, ...).
In this case, developers can still create a new instance by using the constructor directly:
var instance = new MyClass();
How do I prevent developers from doing this?
Another way is to create an instance (constructor access of the class is private now - singleton pattern) and register it with unity like below, I lose the dependency property injection, and my workaround is to use the service locator to initialize the dependency properties in the static method Instance:
this.UnityContainer.RegisterInstance<MyClass>(MyClass.Instance);
What is the best way to define the singleton pattern in both cases simultaneous (with and without unity)?
Hide the class away from your users if you want to prevent them from creating it.
That means creating a public interface for your class, while the class itself is not public. Having an interface for your service is a good idea anyway, think of unit testing, for example...
Several options come to mind for the non-publicness of your service implementation:
But be aware of the fact that malicious users can always use reflection to create their own instances... no 100% safety.