Do you consider using an inverse of a management container , such as StructureMap or Unity ? This can allow you to save the default resources along with the project (which is most important for IMHO), while allowing the client to locally redefine resources as needed.
As an example, suppose you have the following interface:
public interface IResourceSupplier {
Using IOC, you can create a centralized resource provider for a solution that will validate for user-defined overrides. If user redefinition is not provided, you can request each resource provider for a specific project (detected when the application starts) until you find the one that returns the desired resource.
Obviously, depending on your needs, you may need to tune performance, for example, by caching frequently used resources. Using IOC provides the advantage that, until the interface changes, the inclusion of an alternative implementation can be a relatively trivial task.
Does it help?
source share