Esempio n. 1
0
        private void ResetControllActions()
        {
            //((CustomRazorViewEngine)_razorViewEngine).ClearCache();
            //((CustomRuntimeViewCompiler)_viewCompiler.GetCompiler()).ClearCache();
            #region 通过反射清空缓存
            //注意:以下反射的是内部类,随着版本升级字段名可能不同
            var viewLookupCacheField = _razorViewEngine.GetType().GetProperty("ViewLookupCache", BindingFlags.Instance | BindingFlags.NonPublic);
            var viewLookupCache      = viewLookupCacheField.GetValue(_razorViewEngine) as MemoryCache;
            viewLookupCache?.Clear();
            var viewCompiler = _viewCompiler.GetCompiler();
            var precompiledViewCacheField = viewCompiler.GetType().GetField("_cache", BindingFlags.Instance | BindingFlags.NonPublic);
            var precompiledViewCache      = precompiledViewCacheField.GetValue(viewCompiler) as MemoryCache;
            precompiledViewCache?.Clear();
            var precompiledViewsField = viewCompiler.GetType().GetField("_precompiledViews", BindingFlags.Instance | BindingFlags.NonPublic);

            var precompiledViews = precompiledViewsField.GetValue(viewCompiler)  as Dictionary <string, CompiledViewDescriptor>;

            var feature = new ViewsFeature();
            _partManager.PopulateFeature(feature);
            foreach (var precompiledView in feature.ViewDescriptors)
            {
                if (!precompiledViews.ContainsKey(precompiledView.RelativePath))
                {
                    // View ordering has precedence semantics, a view with a higher precedence was
                    // already added to the list.
                    precompiledViews.Add(precompiledView.RelativePath, precompiledView);
                }
                else
                {
                    var oldPreCompiledView = precompiledViews[precompiledView.RelativePath];
                    if (oldPreCompiledView.Type != precompiledView.Type)
                    {
                        precompiledViews[precompiledView.RelativePath] = precompiledView;
                    }
                }
            }
            #endregion
            _dynamicChangeTokenProvider.NotifyChanges();
        }
Esempio n. 2
0
        public RazorHotReload(
            IRazorViewEngine razorViewEngine,
            IRazorPageActivator razorPageActivator,
            ITagHelperFactory tagHelperFactory,
            IViewCompilerProvider viewCompilerProvider,
            ITagHelperComponentPropertyActivator tagHelperComponentPropertyActivator,
            ApplicationPartManager applicationPartManager)
        {
            // For Razor view services, use the service locator pattern because they views not be registered by default.
            _razorCompiledItemFeatureProvider = applicationPartManager.FeatureProviders.OfType <RazorCompiledItemFeatureProvider>().FirstOrDefault();

            if (viewCompilerProvider is DefaultViewCompiler defaultViewCompiler)
            {
                _defaultViewCompiler = defaultViewCompiler;
            }

            if (razorViewEngine.GetType() == typeof(RazorViewEngine))
            {
                _razorViewEngine = (RazorViewEngine)razorViewEngine;
            }

            if (razorPageActivator.GetType() == typeof(RazorPageActivator))
            {
                _razorPageActivator = (RazorPageActivator)razorPageActivator;
            }

            if (tagHelperFactory is DefaultTagHelperFactory defaultTagHelperFactory)
            {
                _defaultTagHelperFactory = defaultTagHelperFactory;
            }

            if (tagHelperComponentPropertyActivator is TagHelperComponentPropertyActivator defaultTagHelperComponentPropertyActivator)
            {
                _tagHelperComponentPropertyActivator = defaultTagHelperComponentPropertyActivator;
            }
        }