Beispiel #1
0
 public ModuleViewCompilerProvider(
     ApplicationPartManager applicationPartManager,
     IModuleChangeProvider moduleChangeProvider,
     ILoggerFactory loggerFactory)
 {
     _compiler = new ModuleViewCompiler(applicationPartManager, moduleChangeProvider, loggerFactory.CreateLogger <ModuleViewCompiler>());
 }
        public ModuleActionDescriptorChangeProvider(
            IModuleChangeProvider moduleChangeProvider)
        {
            _moduleChangeProvider = moduleChangeProvider ?? throw new ArgumentNullException(nameof(moduleChangeProvider));

            _changeTokenRegistrations = new List <IDisposable>(_moduleChangeProvider.EntryAssemblyPaths.Count());

            foreach (var entryAssemblyPath in _moduleChangeProvider.EntryAssemblyPaths)
            {
                _changeTokenRegistrations.Add(
                    ChangeToken.OnChange(
                        () => _moduleChangeProvider.GetChangeToken(entryAssemblyPath),
                        RaiseChanged));
            }
        }
Beispiel #3
0
        public ModuleViewCompiler(
            ApplicationPartManager partManager,
            IModuleChangeProvider moduleChangeProvider,
            ILogger logger)
        {
            _partManager          = partManager ?? throw new ArgumentNullException(nameof(partManager));
            _moduleChangeProvider = moduleChangeProvider ?? throw new ArgumentNullException(nameof(moduleChangeProvider));
            _logger = logger ?? throw new ArgumentNullException(nameof(logger));

            _normalizedPathCache = new ConcurrentDictionary <string, string>(StringComparer.Ordinal);

            // This is our L0 cache, and is a durable store. Views migrate into the cache as they are requested
            // from either the set of known precompiled views, or by being compiled.
            _cache = new MemoryCache(new MemoryCacheOptions());

            var moduleRazorParts = _partManager.ApplicationParts.OfType <CompiledRazorModulesAssemblyPart>().ToList();

            var razorParts = _partManager.ApplicationParts.OfType <CompiledRazorAssemblyPart>().ToList();

            _compiledViews = new Dictionary <string, Task <CompiledViewDescriptor> >(StringComparer.OrdinalIgnoreCase);
            var precompiledViews = new Dictionary <string, CompiledViewDescriptor>(StringComparer.OrdinalIgnoreCase);

            foreach (var razorPart in moduleRazorParts)
            {
                if (razorPart is IRazorCompiledItemProvider provider)
                {
                    foreach (var item in provider.CompiledItems)
                    {
                        var descriptor = new CompiledViewDescriptor(item)
                        {
                            ExpirationTokens = new List <IChangeToken>()
                            {
                                _moduleChangeProvider.GetChangeToken(razorPart.EntryAssemblyPath)
                            }
                        };
                        if (!precompiledViews.ContainsKey(descriptor.RelativePath))
                        {
                            precompiledViews.Add(descriptor.RelativePath, descriptor);
                        }
                    }
                }
            }
            foreach (var razorPart in razorParts)
            {
                if (razorPart is IRazorCompiledItemProvider provider)
                {
                    foreach (var item in provider.CompiledItems)
                    {
                        var descriptor = new CompiledViewDescriptor(item);
                        if (!_compiledViews.ContainsKey(descriptor.RelativePath))
                        {
                            _compiledViews.Add(descriptor.RelativePath, Task.FromResult(descriptor));
                        }
                    }
                }
            }
            foreach (var razorView in precompiledViews)
            {
                var cacheEntryOptions = new MemoryCacheEntryOptions();

                for (var i = 0; i < razorView.Value.ExpirationTokens.Count; i++)
                {
                    cacheEntryOptions.ExpirationTokens.Add(razorView.Value.ExpirationTokens[i]);
                }
                _cache.Set(razorView.Value.RelativePath, Task.FromResult(razorView), cacheEntryOptions);
            }
        }