我正在尝试在this answer中实施解决方案,以便能够限制WeBlog中标记云中显示的标记数量。另外,我正在使用文档中的these instructions。
我已将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类,还需要更改哪些内容?
我正在使用WeBlog 5.2和Sitecore 7.1。
答案 0 :(得分:0)
在查看WeBlog代码后,很明显正在使用回退对象,并且忽略了我的配置更改。
原因是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"/>
这是WeBlog代码:
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;
}