首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何覆盖ITagManager模块中的WeBlog模块

如何覆盖ITagManager模块中的WeBlog模块
EN

Stack Overflow用户
提问于 2016-03-03 10:01:10
回答 1查看 26关注 0票数 2

我试图在这个答案中实现该解决方案,以便能够限制WeBlog中标记云中显示的标记数量。此外,我正在使用文档中的这些指示

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

代码语言:javascript
复制
<setting name="WeBlog.Implementation.TagManager" value="My.Namespace.CustomTagManager"/>

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

我的CustomTagManager目前是ITagManager接口的基本实现。

代码语言:javascript
复制
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类,我还需要更改什么?

我使用的是WeBlog 5.2和Sitecore 7.1。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-03-03 11:01:48

在查看了WeBlog代码之后,很明显,fallback对象被使用了,而我的配置更改被忽略了。

造成这种情况的原因是WeBlog做了:

代码语言:javascript
复制
var type = Type.GetType(typeName, false);

GetType方法仅在mscorlib.dll或当前程序集中找到类型时才能工作。因此,修复只需提供程序集完全限定的名称即可。

代码语言:javascript
复制
<setting name="WeBlog.Implementation.TagManager" value="My.Assembly.CustomTagManager, My.Assembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"/>

这是WeBlog代码:

代码语言:javascript
复制
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;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35768887

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档