2

我正在尝试在此答案中实施解决方案,以便能够限制显示在 WeBlog 中标签云中的标签数量。此外,我正在使用文档中的这些说明

我已经修改了 WeBlog 配置以指向我自己的自定义 TagManager 实现。

<setting name="WeBlog.Implementation.TagManager" value="My.Namespace.CustomTagManager"/>

如果我加载sitecore/admin/showconfig.aspx,我可以确认配置设置已更新为新值。

CustomTagManager目前是ITagManager接口的一个简单的实现。

public class CustomTagManager : ITagManager
{
    public string[] GetTagsByBlog(ID blogId)
    {
        throw new System.NotImplementedException();
    }

    public string[] GetTagsByBlog(Item blogItem)
    {
        throw new System.NotImplementedException();
    }

    public Dictionary<string, int> GetTagsByEntry(EntryItem entry)
    {
        throw new System.NotImplementedException();
    }

    public Dictionary<string, int> GetAllTags()
    {
        throw new System.NotImplementedException();
    }

    public Dictionary<string, int> GetAllTags(BlogHomeItem blog)
    {
        throw new System.NotImplementedException();
    }

    public Dictionary<string, int> SortByWeight(IEnumerable<string> tags)
    {
        throw new System.NotImplementedException();
    }
}

我可以反映已部署的 DLL 并看到这些更改肯定已进行,但更改没有影响。没有任何异常被抛出,并且标签云继续填充,就好像我根本没有做任何更改一样。就像配置文件更改被完全忽略一样。

为了编写我自己的客户 TagManager 类,我还需要更改哪些内容?

我正在使用微博 5.2 和 Sitecore 7.1。

4

1 回答 1

0

查看微博代码后,很明显正在使用回退对象,而我的配置更改被忽略了。

造成这种情况的原因是 WeBlog 确实:

var type = Type.GetType(typeName, false);

GetType仅当在 mscorlib.dll 或当前程序集中找到该类型时,该方法才有效。因此,修复就像提供程序集完全限定名称一样简单。

<setting name="WeBlog.Implementation.TagManager" value="My.Assembly.CustomTagManager, My.Assembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"/>

这是微博代码:

private static T CreateInstance<T>(string typeName, Func<T> fallbackCreation) where T : class
{
    var type = Type.GetType(typeName, false);
    T instance = null;
    if (type != null)
    {
        try
        {
            instance = (T)Sitecore.Reflection.ReflectionUtil.CreateObject(type);
        }
        catch(Exception ex)
        {
            Log.Error("Failed to create instance of type '{0}' as type '{1}'".FormatWith(type.FullName, typeof(T).FullName), ex, typeof(ManagerFactory));
        }
    }

    if(instance == null)
        instance = fallbackCreation();

    return instance;
}
于 2016-03-03T11:01:48.893 回答