There are two ways around this. The first involves using the Plug In / Module pattern. Start here for this.
The second way is to simply expose your API logic through well-documented assemblies.
The way you choose really comes down to how you want to implement it. For example, Adobe Photoshop uses the plugin template to a large extent. MS Office uses both plug-ins and also provides an object interface for working with the application.
UPDATE: Objects in .Net assemblies can be affected by external applications by simply setting the scope of objects in Public. This includes window forms, business objects, listing, etc.
Think about it from the perspective of an external developer. What information do they need to be successful in expanding / controlling your product? Whatever it is, put it in the help file.
Also, use the features of .Net automatic documentation. This includes adding XML documentation that the IDE already knows how to read and display through intellisense. For example:
/// <summary> /// Gets all active documents for the specified customer. /// </summary> /// <param name="customerId">The Id of the customer.</param> /// <returns>A list of documents for this customer.</returns> public static List<Document> GetDocuments(int customerId) { //... do something ... }
Notme
source share