I assume that an inline resource is a good option if you are happy to recompile and redeploy each time there is a change; also, just because you can be happy to do this does not mean that everyone will be :)
A very common approach is to abstract any kind of access to data behind the interface; if you do, you can let users choose which implementation they want (provided that you provide a pair), and this will allow them to write their own. In terms of patterns, this is Dependancy Inversion (also known as control inversion).
instansiation config ( : Factory), (, ). , , : XML , SqlLite, -/ ..
Rolands - ( , ).
Visual Studio.NET