使用代码在Orchard CMS 1.8+中获取模块的版本号

时间:2015-04-13 14:32:20

标签: orchardcms

有时,我喜欢记录模块的版本号。如何在代码中(以编程方式)获取模块的版本号?

2 个答案:

答案 0 :(得分:0)

与您在控制器的构造函数中请求IOrchardServices的方式相同,您可以请求IExtensionManager。然后,使用带有模块名称的GetExtension方法(如 module.txt id中所示),它返回一个公开ExtensionDescriptor属性的Version ,以及其他有用的属性。

您可以在RecipeHarvester源代码中看到使用IExtensionManager的示例。

答案 1 :(得分:0)

如果需要从代码中的任何位置访问模块,则需要首先初始化ExtensionManager。为此,您将需要当前的workContext。这就是我这样做的方式。

public class Extensioner
{
    public IExtensionManager _manager { get; set; }

    public Extensioner()
    {            
        var httpContextAccessor = System.Web.Http.GlobalConfiguration.Configuration.DependencyResolver.GetService(
            typeof(IHttpContextAccessor)) as IHttpContextAccessor;

        var workContext = WorkContextExtensions.GetWorkContext(httpContextAccessor.Current().Request.RequestContext);

        _manager = workContext.Resolve<IExtensionManager>();

    }

    public string getModuleVersion(string moduleName)
    {
        var _ver = "unknown";
        if (_manager != null)
        {
            _ver = _manager.GetExtension(moduleName).Version;
        }

        return _ver;
    }
}

向我展示道路的页面:

https://disqus.com/home/discussion/skywalkersoftwaredevelopment/orchard_webapi_global_actionfilters_and_dependency_injection/

还有一些理论: https://orcharddojo.net/orchard-resources/Library/Wiki/WorkContext