EpiServer - 模拟UrlResolver的简便方法

时间:2015-05-21 09:51:04

标签: episerver episerver-7

有没有简单的方法来模拟UrlResolver类? 我将它作为参数传递给构造函数。

public Service(UrlResolver urlResolver){
    _urlResolver = urlResolver;
}

修改 根据Henrik N.评论,此问题已在EpiServer 8中得到解决。

但是在我的解决方案中有一个EpiServer 8之前,我将使用自定义接口+适配器。

3 个答案:

答案 0 :(得分:2)

在EPiServer.CMS.Core版本8.0.0中删除了导致该问题的依赖项,因此如果您可以更新到最新版本,那么您应该没问题。

答案 1 :(得分:1)

我最终为UrlResolver创建了自己的IUrlResolver接口和适配器。

public interface IUrlResolver
{
    string GetUrl(ContentReference contentReference, Language language);
}

public class UrlResolverAdapter : IUrlResolver
{
    public string GetUrl(ContentReference contentReference, Language language)
    {
        return UrlResolver.Current.GetUrl(contentReference, language);
    }
}

答案 2 :(得分:0)

是。使用优秀的FakeItEasy模拟库,它就像:

一样简单
UrlResolver fakeUrlResolver = A.Fake<UrlResolver>();

然后使用它来实例化您的Service

var myService = new Service(fakeUrlResolver);

如果你需要假货来返回特定的方法调用,那也是可能的。比如说,代码获取PageReference的公共URL。

PageReference myLink = new PageReference(123);
UrlResolver fakeUrlResolver = A.Fake<UrlResolver>();
A.CallTo(() => fakeUrlResolver.GetUrl(myLink)).Returns("my/fake/url");

// probably initialize some other code with myLink at this point

var myService = new Service(fakeUrlResolver);