1

我正在尝试将我的 Kentico Cloud SDK 从 v7 升级到 v10。在我刚刚创建 DeliveryClient 的新实例以构建我的站点 url 的服务以解析然后将其传递给我的 CustomContentLinkUrlResolver 例如

services.AddSingleton<NavigationProvider>(c => new NavigationProvider(new DeliveryClient(deliveryOptions) {
    CodeFirstModelProvider = { TypeProvider = new CustomTypeProvider() }
}, cache));

services.AddSingleton<IDeliveryClient>(c => new CachedDeliveryClient(projectOptions, cache)
{
    CodeFirstModelProvider = { TypeProvider = new CustomTypeProvider() },
    ContentLinkUrlResolver = new CustomContentLinkUrlResolver(c.GetRequiredService<NavigationProvider>())
});

所以我有这个循环依赖,其中 DeliveryClient 依赖于 CustomContentLinkUrlResolver,而 CustomContentLinkUrlResolver 又依赖于 DeliveryClient。

令人沮丧的部分是 ResolveLinkUrl(ContentLink link) 方法没有我需要解析 url 的信息,因为 url 是由 ContentLink 中不可用的项目的分类定义的,这意味着我必须再次查找该项目得到分类。

我不知道如何绕过依赖 DeliveryClient 的 CustomContentLinkUrlResolver。

4

1 回答 1

0

我希望我的情况是正确的:

您在依赖注入容器中调用DeliveryClient实例化作为单例,并且此客户端正在使用CustomContentLinkUrlResolver它需要进行另一个 API 调用以获取项目分类的信息,但您希望使用不同的实例DeliveryClient来避免对单例实现的循环依赖。

DeliveryClient在这种情况下,可以使用版本 8DeliveryClientBuilder中引入的来创建一个新的实例。

// Sample resolver implementation
public class CustomContentLinkUrlResolver : IContentLinkUrlResolver
{
    public string ResolveLinkUrl(ContentLink link)
    {
        IDeliveryClient client = DeliveryClientBuilder.WithProjectId("<YOUR_PROJECT_ID>").Build();
       // Do the call
       // return URL
    }
}

于 2019-03-29T02:42:12.797 回答