示例#1
0
 public void Dispose()
 {
     if (_razorEngineRendererHost != null)
     {
         _razorEngineRendererHost.Dispose();
         _razorEngineRendererHost = null;
     }
 }
示例#2
0
        public LoadResult Load(Stream templateStream)
        {
            if (templateStream == null)
            {
                throw new ArgumentNullException(nameof(templateStream));
            }

            if (!templateStream.CanRead || !templateStream.CanSeek)
            {
                throw new ArgumentException("The supplied stream must be readable and seekable", nameof(templateStream));
            }

            if (_loadCalled)
            {
                throw new InvalidOperationException("Cannot call Load more than once");
            }

            _loadCalled = true;

            _razorEngineRendererHost = new AppDomainIsolatedHost <RazorEngineRenderer>();

            _encoding = TextEncodingDetector.GetEncoding(templateStream);

            using (var reader = new StreamReader(templateStream))
            {
                _loadedTemplate = reader.ReadToEnd();
            }

            RazorTemplateLoadResult razorTemplateLoadResult;

            try
            {
                _razorEngineRenderer    = _razorEngineRendererHost.CreateHostedInstance();
                razorTemplateLoadResult = _razorEngineRenderer.LoadTemplate(_loadedTemplate);
            }
            catch (TemplateParsingException ex)
            {
                razorTemplateLoadResult = new RazorTemplateLoadResult(
                    RazorTemplateLoadResult.LoadResultStatus.CodeGenerationFailed,
                    new[] { $"Code Generation Error: {ex.Message} (at line {ex.Line}, column {ex.Column}" });
            }
            catch (TemplateCompilationException ex)
            {
                razorTemplateLoadResult = new RazorTemplateLoadResult(
                    RazorTemplateLoadResult.LoadResultStatus.CodeCompilationFailed,
                    ex.CompilerErrors.Select(e => $"Code Compilation Error: {e.ErrorNumber}: {e.ErrorText} (at line {e.Line}, column {e.Column})").ToArray());
            }
            catch (Exception ex)
            {
                razorTemplateLoadResult = new RazorTemplateLoadResult(
                    RazorTemplateLoadResult.LoadResultStatus.CodeCompilationFailed,
                    new [] { $"Exception while compiling template: {ex}" });
            }

            return(MapToLoadResult(razorTemplateLoadResult));
        }
示例#3
0
        public void AppDomainIsolatedHost_Dispose_IsolationAppDomainUnloaded()
        {
            // Arrange
            const string appDomainName = @"testHost";

            // Act
            using (var isolatedHost = new AppDomainIsolatedHost <TestHost>(location, string.Empty, appDomainName))
            {
            }

            // Assert
            Assert.False(AppDomainHelper.GetAppDomainNames().Any(d => IsIsolatedAppDomain(d, appDomainName)));
        }
示例#4
0
        public void AppDomainIsolatedHost_StartHost_IsolationAppDomainLoaded()
        {
            // Arrange
            const string appDomainName = @"testHost";

            using (var isolatedHost = new AppDomainIsolatedHost <TestHost>(location, string.Empty, appDomainName))
            {
                // Act
                using (var handle = isolatedHost.Start())
                {
                    // Assert
                    Assert.True(AppDomainHelper.GetAppDomainNames().Any(d => IsIsolatedAppDomain(d, appDomainName)));
                }
            }
        }
示例#5
0
        public void AppDomainIsolatedHost_Create_IsolationAppDomainLoaded()
        {
            // Arrange
            const string appDomainName = @"testHost";

            Assert.False(AppDomainHelper.GetAppDomainNames().Any(d => IsIsolatedAppDomain(d, appDomainName)));

            // Act
            using (var isolatedHost = new AppDomainIsolatedHost <TestHost>(location, string.Empty, appDomainName))
            {
                // Assert
                Assert.NotNull(isolatedHost);
                Assert.True(AppDomainHelper.GetAppDomainNames().Any(d => IsIsolatedAppDomain(d, appDomainName)));
            }
        }