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

Get a module's version number in Orchard CMS 1.8+ using code

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

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

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

如果您需要从代码中的任何位置访问模块,您需要先初始化一个 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