Johan Bjรถrnfot on EPiServer explains some of the details in this post .
Excerpts:
โIn previous versions of CMS, there were pages (PageData) - the only type of content that processed the content repository (traditionally DataFactory). In CMS7, this has changed, so now the content repository (IContentRepository) processes instances of IContent. This means the requirement is a .NET type that can be saved / loaded from the content repository, is that it implements the EPiServer.Core.IContent interface.
There are some IContent implementations built into the CMS, such as PageData and ContentFolder (used to group instances of data blocks), as well as the ability to register custom IContent implementations. If you look at BlockData, although you notice that it does not implement IContent, how are shared block instances handled?
The answer is that at runtime, when an instance of a common block is created (for example, by calling IContentRepository.GetDefault, where T is a type inheriting from BlockData), CMS will create a new .NET type that inherits T using a technique called mixin where the newly created subclass will implement some additional interfaces (including IContent).
Ted nyberg
source share