I would like some advice on the best approach to use in the following situation...
I will have a Windows Application and a Web Application (presentation layers), these w
Your general approach is sound :)
You could consider putting all the interfaces in a seperate assembly (dll) (strictly speaking the interface sits between the business logic and the data access implementation - they should be the only things that have access to the interface), but in the grand scheme of things that might not be such a big deal.
Personally I'd have one shared factory method that returned an object, and just cast it appropriately when used.