Episerver - 为什么BlockData不实现IContent

gri*_*ave 7 episerver episerver-7

有谁知道BlockData类为什么不直接实现IContent?我知道在从数据库中检索BlockData期间,由Castle创建的代理实现了IContent.

如果StackOverflow不适合此类问题,请移动它.

Ted*_*erg 5

EPiServer的JohanBjörnfot解释了这篇文章中的一些细节.

摘抄:

"在以前版本的CMS中,页面(PageData)是内容存储库(传统上是DataFactory)处理的唯一内容类型.在CMS7中,这已经改变,所以现在内容存储库(IContentRepository)处理IContent实例.这意味着需要.NET可以从内容存储库保存/加载的类型是它实现了接口EPiServer.Core.IContent.

在内置于CMS中的IContent有一些实现,如PageData和ContentFolder(用于对共享块实例进行分组),也可以注册自定义IContent实现.如果你看看BlockData虽然你会注意到它没有实现IContent,然后处理共享块实例?

答案是在创建共享块实例的运行时(例如,通过调用IContentRepository.GetDefault,其中T是继承自BlockData的类型),CMS将创建一个新的.NET类型,使用名为mixin的技术继承T生成的子类将实现一些额外的接口(包括IContent)."