我正在尝试实例化内容API,如下所示
Ektron.Cms.ContentAPI contentApi = new Ektron.Cms.ContentAPI();我已经添加了所有必需的参考资料,但我得到了以下错误。
An exception of type 'Microsoft.Practices.Unity.ResolutionFailedException' occurred in Ektron.Cms.ObjectFactory.dll but was not handled in user codeAdditional information: Resolution of the dependency failed, type = "Ektron.Cms.Settings.ISite", name = "(none)".
发布于 2015-01-15 15:46:54
Ektron所依赖的配置文件相当多。用于解析ISite的此特定错误消息将在ektron.cms.framework.unity.config中解析。
至少可以说,从一个非web项目中使用Ektron是很棘手的。(参考:无法从类库中使用)
这可能是因为您混淆了单元测试和集成测试。以下是一些这样的资源:
由于面向公共的API没有实现接口,所以Ektron代码的单元测试是很困难的。您可以编写位于FrameworkAPI之上的外观,并实现您需要调用的方法。就像这样:
public interface IContentManagerFacade
{
ContentData GetItem(long id, bool returnMetadata);
}
public class ContentManagerFacade : IContentManagerFacade
{
public ContentData GetItem(long id, bool returnMetadata)
{
var cm = new ContentManager();
return cm.GetItem(id, returnMetadata);
}
}这样,您就可以创建IContentManagerFacade的模拟实现,以便在单元测试中使用。你的门面可以变得复杂到他们需要的程度。如果这是您使用的唯一api方法,那么您就完成了。如果您使用更多的API,那么您的类也会增长。也许您还需要一个TaxonomyManagerFacade或其他什么东西。
如果您真的想从您的测试项目调用Ektron,那么我祝您好运。通过添加所有配置文件并可能引用System.Web,您可以将一些东西拼凑在一起。或者,您可以使用三级dll调用Framework。
最新情况:
虽然我在这里的答案是以FrameworkAPI为例,但同样适用于围绕旧的遗留api类(如ContentAPI类)构建外观。唯一的区别是,我不认为ContentAPI可以作为3层api的一部分。
https://stackoverflow.com/questions/27964448
复制相似问题