diff --git a/src/AddIns/BackendBindings/AspNet.Mvc/Project/AspNet.Mvc.csproj b/src/AddIns/BackendBindings/AspNet.Mvc/Project/AspNet.Mvc.csproj
index ccf634eec1..461b6574d2 100644
--- a/src/AddIns/BackendBindings/AspNet.Mvc/Project/AspNet.Mvc.csproj
+++ b/src/AddIns/BackendBindings/AspNet.Mvc/Project/AspNet.Mvc.csproj
@@ -61,6 +61,8 @@
+
+
@@ -73,8 +75,10 @@
+
+
@@ -101,9 +105,12 @@
+
+
+
diff --git a/src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/CurrentAppDomain.cs b/src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/CurrentAppDomain.cs
new file mode 100644
index 0000000000..6910a796a3
--- /dev/null
+++ b/src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/CurrentAppDomain.cs
@@ -0,0 +1,19 @@
+// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
+// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
+
+using System;
+using ICSharpCode.TextTemplating;
+
+namespace ICSharpCode.AspNet.Mvc
+{
+ public class CurrentAppDomain : ITextTemplatingAppDomain
+ {
+ public AppDomain AppDomain {
+ get { return AppDomain.CurrentDomain; }
+ }
+
+ public void Dispose()
+ {
+ }
+ }
+}
diff --git a/src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/CurrentAppDomainFactory.cs b/src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/CurrentAppDomainFactory.cs
new file mode 100644
index 0000000000..79f055a30c
--- /dev/null
+++ b/src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/CurrentAppDomainFactory.cs
@@ -0,0 +1,17 @@
+// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
+// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
+
+using System;
+using ICSharpCode.TextTemplating;
+
+namespace ICSharpCode.AspNet.Mvc
+{
+ [Serializable]
+ public class CurrentAppDomainFactory : ITextTemplatingAppDomainFactory
+ {
+ public ITextTemplatingAppDomain CreateTextTemplatingAppDomain(string applicationBase)
+ {
+ return new CurrentAppDomain();
+ }
+ }
+}
diff --git a/src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/IMvcTextTemplateHostAppDomain.cs b/src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/IMvcTextTemplateHostAppDomain.cs
new file mode 100644
index 0000000000..6286660f2b
--- /dev/null
+++ b/src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/IMvcTextTemplateHostAppDomain.cs
@@ -0,0 +1,18 @@
+// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
+// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
+
+using System;
+using ICSharpCode.TextTemplating;
+
+namespace ICSharpCode.AspNet.Mvc
+{
+ public interface IMvcTextTemplateHostAppDomain : ITextTemplatingAppDomain
+ {
+ string ApplicationBase { get; }
+
+ IMvcTextTemplateHost CreateMvcTextTemplateHost(
+ ITextTemplatingAppDomainFactory appDomainFactory,
+ ITextTemplatingAssemblyResolver assemblyResolver,
+ string applicationBase);
+ }
+}
diff --git a/src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/IMvcTextTemplateHostAppDomainFactory.cs b/src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/IMvcTextTemplateHostAppDomainFactory.cs
new file mode 100644
index 0000000000..5312a4e0a0
--- /dev/null
+++ b/src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/IMvcTextTemplateHostAppDomainFactory.cs
@@ -0,0 +1,13 @@
+// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
+// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
+
+using System;
+using ICSharpCode.TextTemplating;
+
+namespace ICSharpCode.AspNet.Mvc
+{
+ public interface IMvcTextTemplateHostAppDomainFactory
+ {
+ IMvcTextTemplateHostAppDomain CreateAppDomain();
+ }
+}
diff --git a/src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/IMvcTextTemplateHostFactory.cs b/src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/IMvcTextTemplateHostFactory.cs
index b6152ecbac..d848857926 100644
--- a/src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/IMvcTextTemplateHostFactory.cs
+++ b/src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/IMvcTextTemplateHostFactory.cs
@@ -3,11 +3,14 @@
using System;
using ICSharpCode.SharpDevelop.Project;
+using ICSharpCode.TextTemplating;
namespace ICSharpCode.AspNet.Mvc
{
public interface IMvcTextTemplateHostFactory
{
- IMvcTextTemplateHost CreateMvcTextTemplateHost(IMvcProject project);
+ IMvcTextTemplateHost CreateMvcTextTemplateHost(
+ IMvcProject project,
+ IMvcTextTemplateHostAppDomain appDomain);
}
}
diff --git a/src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/MvcControllerFileGenerator.cs b/src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/MvcControllerFileGenerator.cs
index 70df3dc0eb..7349e2a403 100644
--- a/src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/MvcControllerFileGenerator.cs
+++ b/src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/MvcControllerFileGenerator.cs
@@ -9,12 +9,16 @@ namespace ICSharpCode.AspNet.Mvc
public class MvcControllerFileGenerator : MvcFileGenerator, IMvcControllerFileGenerator
{
public MvcControllerFileGenerator()
- : this(new MvcTextTemplateHostFactory())
+ : this(
+ new MvcTextTemplateHostFactory(),
+ new MvcTextTemplateHostAppDomainFactory())
{
}
- public MvcControllerFileGenerator(IMvcTextTemplateHostFactory hostFactory)
- : base(hostFactory)
+ public MvcControllerFileGenerator(
+ IMvcTextTemplateHostFactory hostFactory,
+ IMvcTextTemplateHostAppDomainFactory appDomainFactory)
+ : base(hostFactory, appDomainFactory)
{
this.Template = new MvcControllerTextTemplate();
}
diff --git a/src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/MvcFileGenerator.cs b/src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/MvcFileGenerator.cs
index 5bb5ccf3f1..f203dff084 100644
--- a/src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/MvcFileGenerator.cs
+++ b/src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/MvcFileGenerator.cs
@@ -4,16 +4,21 @@
using System;
using System.CodeDom.Compiler;
using ICSharpCode.SharpDevelop.Project;
+using ICSharpCode.TextTemplating;
namespace ICSharpCode.AspNet.Mvc
{
public abstract class MvcFileGenerator
{
IMvcTextTemplateHostFactory hostFactory;
+ IMvcTextTemplateHostAppDomainFactory appDomainFactory;
- public MvcFileGenerator(IMvcTextTemplateHostFactory hostFactory)
+ public MvcFileGenerator(
+ IMvcTextTemplateHostFactory hostFactory,
+ IMvcTextTemplateHostAppDomainFactory appDomainFactory)
{
this.hostFactory = hostFactory;
+ this.appDomainFactory = appDomainFactory;
}
public MvcTextTemplateLanguage TemplateLanguage { get; set; }
@@ -21,14 +26,21 @@ namespace ICSharpCode.AspNet.Mvc
public void GenerateFile(MvcFileName fileName)
{
- using (IMvcTextTemplateHost host = CreateHost()) {
- GenerateFile(host, fileName);
+ using (IMvcTextTemplateHostAppDomain appDomain = CreateAppDomain()) {
+ using (IMvcTextTemplateHost host = CreateHost(appDomain)) {
+ GenerateFile(host, fileName);
+ }
}
}
- IMvcTextTemplateHost CreateHost()
+ IMvcTextTemplateHostAppDomain CreateAppDomain()
{
- return hostFactory.CreateMvcTextTemplateHost(Project);
+ return appDomainFactory.CreateAppDomain();
+ }
+
+ IMvcTextTemplateHost CreateHost(IMvcTextTemplateHostAppDomain appDomain)
+ {
+ return hostFactory.CreateMvcTextTemplateHost(Project, appDomain);
}
void GenerateFile(IMvcTextTemplateHost host, MvcFileName fileName)
diff --git a/src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/MvcTextTemplateAssemblyResolver.cs b/src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/MvcTextTemplateAssemblyResolver.cs
new file mode 100644
index 0000000000..9648bcfd59
--- /dev/null
+++ b/src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/MvcTextTemplateAssemblyResolver.cs
@@ -0,0 +1,17 @@
+// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
+// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
+
+using System;
+using ICSharpCode.TextTemplating;
+
+namespace ICSharpCode.AspNet.Mvc
+{
+ [Serializable]
+ public class MvcTextTemplateAssemblyResolver : ITextTemplatingAssemblyResolver
+ {
+ public string Resolve(string assemblyReference)
+ {
+ return assemblyReference;
+ }
+ }
+}
diff --git a/src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/MvcTextTemplateHostAppDomain.cs b/src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/MvcTextTemplateHostAppDomain.cs
new file mode 100644
index 0000000000..cec3079f0b
--- /dev/null
+++ b/src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/MvcTextTemplateHostAppDomain.cs
@@ -0,0 +1,39 @@
+// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
+// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
+
+using System;
+using System.Reflection;
+using ICSharpCode.TextTemplating;
+
+namespace ICSharpCode.AspNet.Mvc
+{
+ public class MvcTextTemplateHostAppDomain : TextTemplatingAppDomain, IMvcTextTemplateHostAppDomain
+ {
+ public MvcTextTemplateHostAppDomain(string applicationBase)
+ : base(applicationBase)
+ {
+ this.ApplicationBase = applicationBase;
+ }
+
+ public string ApplicationBase { get; private set; }
+
+ public IMvcTextTemplateHost CreateMvcTextTemplateHost(
+ ITextTemplatingAppDomainFactory appDomainFactory,
+ ITextTemplatingAssemblyResolver assemblyResolver,
+ string applicationBase)
+ {
+ Type type = typeof(MvcTextTemplateHost);
+ var args = new object[] { appDomainFactory, assemblyResolver, applicationBase };
+
+ return (MvcTextTemplateHost)AppDomain.CreateInstanceAndUnwrap(
+ type.Assembly.FullName,
+ type.FullName,
+ false,
+ BindingFlags.CreateInstance,
+ null,
+ args,
+ null,
+ null);
+ }
+ }
+}
diff --git a/src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/MvcTextTemplateHostAppDomainFactory.cs b/src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/MvcTextTemplateHostAppDomainFactory.cs
new file mode 100644
index 0000000000..b913c7d681
--- /dev/null
+++ b/src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/MvcTextTemplateHostAppDomainFactory.cs
@@ -0,0 +1,24 @@
+// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
+// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
+
+using System;
+using System.IO;
+using ICSharpCode.TextTemplating;
+
+namespace ICSharpCode.AspNet.Mvc
+{
+ public class MvcTextTemplateHostAppDomainFactory : IMvcTextTemplateHostAppDomainFactory
+ {
+ public IMvcTextTemplateHostAppDomain CreateAppDomain()
+ {
+ string applicationBase = GetAssemblyBaseLocation();
+ return new MvcTextTemplateHostAppDomain(applicationBase);
+ }
+
+ string GetAssemblyBaseLocation()
+ {
+ string location = GetType().Assembly.Location;
+ return Path.GetDirectoryName(location);
+ }
+ }
+}
diff --git a/src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/MvcTextTemplateHostFactory.cs b/src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/MvcTextTemplateHostFactory.cs
index cbda853a3f..341ea427a2 100644
--- a/src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/MvcTextTemplateHostFactory.cs
+++ b/src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/MvcTextTemplateHostFactory.cs
@@ -2,26 +2,18 @@
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
-using System.IO;
-using ICSharpCode.SharpDevelop.Project;
-using ICSharpCode.TextTemplating;
namespace ICSharpCode.AspNet.Mvc
{
public class MvcTextTemplateHostFactory : IMvcTextTemplateHostFactory
{
- public IMvcTextTemplateHost CreateMvcTextTemplateHost(IMvcProject mvcProject)
+ public IMvcTextTemplateHost CreateMvcTextTemplateHost(
+ IMvcProject mvcProject,
+ IMvcTextTemplateHostAppDomain appDomain)
{
- var appDomainFactory = new TextTemplatingAppDomainFactory();
- string applicationBase = GetAssemblyBaseLocation();
- var assemblyResolver = new TextTemplatingAssemblyResolver(mvcProject.Project);
- return new MvcTextTemplateHost(appDomainFactory, assemblyResolver, applicationBase);
- }
-
- string GetAssemblyBaseLocation()
- {
- string location = GetType().Assembly.Location;
- return Path.GetDirectoryName(location);
+ var assemblyResolver = new MvcTextTemplateAssemblyResolver();
+ var appDomainFactory = new CurrentAppDomainFactory();
+ return appDomain.CreateMvcTextTemplateHost(appDomainFactory, assemblyResolver, appDomain.ApplicationBase);
}
}
}
diff --git a/src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/MvcViewFileGenerator.cs b/src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/MvcViewFileGenerator.cs
index 49cad56610..f9ddfbfbae 100644
--- a/src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/MvcViewFileGenerator.cs
+++ b/src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/MvcViewFileGenerator.cs
@@ -13,14 +13,16 @@ namespace ICSharpCode.AspNet.Mvc
public MvcViewFileGenerator()
: this(
new MvcTextTemplateHostFactory(),
- new MvcTextTemplateRepository())
+ new MvcTextTemplateRepository(),
+ new MvcTextTemplateHostAppDomainFactory())
{
}
public MvcViewFileGenerator(
IMvcTextTemplateHostFactory hostFactory,
- MvcTextTemplateRepository textTemplateRepository)
- : base(hostFactory)
+ MvcTextTemplateRepository textTemplateRepository,
+ IMvcTextTemplateHostAppDomainFactory appDomainFactory)
+ : base(hostFactory, appDomainFactory)
{
this.textTemplateRepository = textTemplateRepository;
diff --git a/src/AddIns/BackendBindings/AspNet.Mvc/Test/AspNet.Mvc.Tests.csproj b/src/AddIns/BackendBindings/AspNet.Mvc/Test/AspNet.Mvc.Tests.csproj
index 5bb9ecd6fa..3b92258e29 100644
--- a/src/AddIns/BackendBindings/AspNet.Mvc/Test/AspNet.Mvc.Tests.csproj
+++ b/src/AddIns/BackendBindings/AspNet.Mvc/Test/AspNet.Mvc.Tests.csproj
@@ -62,6 +62,8 @@
+
+
@@ -93,6 +95,7 @@
+
diff --git a/src/AddIns/BackendBindings/AspNet.Mvc/Test/Helpers/FakeMvcTextTemplateAppDomain.cs b/src/AddIns/BackendBindings/AspNet.Mvc/Test/Helpers/FakeMvcTextTemplateAppDomain.cs
new file mode 100644
index 0000000000..783c537edb
--- /dev/null
+++ b/src/AddIns/BackendBindings/AspNet.Mvc/Test/Helpers/FakeMvcTextTemplateAppDomain.cs
@@ -0,0 +1,30 @@
+// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
+// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
+
+using System;
+using ICSharpCode.AspNet.Mvc;
+using ICSharpCode.TextTemplating;
+
+namespace AspNet.Mvc.Tests.Helpers
+{
+ public class FakeMvcTextTemplateAppDomain : IMvcTextTemplateHostAppDomain
+ {
+ public string ApplicationBase { get; set; }
+ public AppDomain AppDomain { get; set; }
+
+ public IMvcTextTemplateHost CreateMvcTextTemplateHost(
+ ITextTemplatingAppDomainFactory appDomainFactory,
+ ITextTemplatingAssemblyResolver assemblyResolver,
+ string applicationBase)
+ {
+ return null;
+ }
+
+ public bool IsDisposed;
+
+ public void Dispose()
+ {
+ IsDisposed = true;
+ }
+ }
+}
diff --git a/src/AddIns/BackendBindings/AspNet.Mvc/Test/Helpers/FakeMvcTextTemplateAppDomainFactory.cs b/src/AddIns/BackendBindings/AspNet.Mvc/Test/Helpers/FakeMvcTextTemplateAppDomainFactory.cs
new file mode 100644
index 0000000000..fdbadd8592
--- /dev/null
+++ b/src/AddIns/BackendBindings/AspNet.Mvc/Test/Helpers/FakeMvcTextTemplateAppDomainFactory.cs
@@ -0,0 +1,18 @@
+// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
+// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
+
+using System;
+using ICSharpCode.AspNet.Mvc;
+
+namespace AspNet.Mvc.Tests.Helpers
+{
+ public class FakeMvcTextTemplateAppDomainFactory : IMvcTextTemplateHostAppDomainFactory
+ {
+ public FakeMvcTextTemplateAppDomain FakeAppDomain = new FakeMvcTextTemplateAppDomain();
+
+ public IMvcTextTemplateHostAppDomain CreateAppDomain()
+ {
+ return FakeAppDomain;
+ }
+ }
+}
diff --git a/src/AddIns/BackendBindings/AspNet.Mvc/Test/Helpers/FakeMvcTextTemplateHostFactory.cs b/src/AddIns/BackendBindings/AspNet.Mvc/Test/Helpers/FakeMvcTextTemplateHostFactory.cs
index f27d9ad3e6..5b680ab722 100644
--- a/src/AddIns/BackendBindings/AspNet.Mvc/Test/Helpers/FakeMvcTextTemplateHostFactory.cs
+++ b/src/AddIns/BackendBindings/AspNet.Mvc/Test/Helpers/FakeMvcTextTemplateHostFactory.cs
@@ -10,11 +10,13 @@ namespace AspNet.Mvc.Tests.Helpers
public class FakeMvcTextTemplateHostFactory : IMvcTextTemplateHostFactory
{
public IMvcProject ProjectPassedToCreateMvcTextTemplateHost;
+ public IMvcTextTemplateHostAppDomain AppDomainPassedToCreateMvcTextTemplateHost;
public FakeMvcTextTemplateHost FakeMvcTextTemplateHost = new FakeMvcTextTemplateHost();
- public IMvcTextTemplateHost CreateMvcTextTemplateHost(IMvcProject project)
+ public IMvcTextTemplateHost CreateMvcTextTemplateHost(IMvcProject project, IMvcTextTemplateHostAppDomain appDomain)
{
ProjectPassedToCreateMvcTextTemplateHost = project;
+ AppDomainPassedToCreateMvcTextTemplateHost = appDomain;
return FakeMvcTextTemplateHost;
}
}
diff --git a/src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/MvcControllerFileGeneratorTests.cs b/src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/MvcControllerFileGeneratorTests.cs
index 7ebdf4f845..ed1e0e3461 100644
--- a/src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/MvcControllerFileGeneratorTests.cs
+++ b/src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/MvcControllerFileGeneratorTests.cs
@@ -16,12 +16,14 @@ namespace AspNet.Mvc.Tests
FakeMvcProject projectUsedByGenerator;
FakeMvcTextTemplateHostFactory fakeHostFactory;
FakeMvcTextTemplateHost fakeHost;
+ FakeMvcTextTemplateAppDomainFactory fakeAppDomainFactory;
void CreateGenerator()
{
fakeHostFactory = new FakeMvcTextTemplateHostFactory();
fakeHost = fakeHostFactory.FakeMvcTextTemplateHost;
- generator = new MvcControllerFileGenerator(fakeHostFactory);
+ fakeAppDomainFactory = new FakeMvcTextTemplateAppDomainFactory();
+ generator = new MvcControllerFileGenerator(fakeHostFactory, fakeAppDomainFactory);
projectUsedByGenerator = new FakeMvcProject();
generator.Project = projectUsedByGenerator;
ProjectPassedToGeneratorIsCSharpProject();
@@ -176,5 +178,29 @@ namespace AspNet.Mvc.Tests
Assert.IsFalse(addActionMethods);
}
+
+ [Test]
+ public void GenerateFile_CSharpControllerTemplate_AppDomainIsDisposed()
+ {
+ CreateGenerator();
+ ProjectPassedToGeneratorIsCSharpProject();
+ GenerateFile();
+ bool disposed = fakeAppDomainFactory.FakeAppDomain.IsDisposed;
+
+ Assert.IsTrue(disposed);
+ }
+
+ [Test]
+ public void GenerateFile_CSharpControllerTemplate_MvcTextTemplateHostIsCreatedWithAppDomain()
+ {
+ CreateGenerator();
+ ProjectPassedToGeneratorIsCSharpProject();
+ GenerateFile();
+
+ IMvcTextTemplateHostAppDomain appDomain = fakeHostFactory.AppDomainPassedToCreateMvcTextTemplateHost;
+ FakeMvcTextTemplateAppDomain expectedAppDomain = fakeAppDomainFactory.FakeAppDomain;
+
+ Assert.AreEqual(expectedAppDomain, appDomain);
+ }
}
}
diff --git a/src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/MvcTextTemplateAssemblyResolverTests.cs b/src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/MvcTextTemplateAssemblyResolverTests.cs
new file mode 100644
index 0000000000..19af044d65
--- /dev/null
+++ b/src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/MvcTextTemplateAssemblyResolverTests.cs
@@ -0,0 +1,31 @@
+// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
+// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
+
+using System;
+using ICSharpCode.AspNet.Mvc;
+using NUnit.Framework;
+
+namespace AspNet.Mvc.Tests
+{
+ [TestFixture]
+ public class MvcTextTemplateAssemblyResolverTests
+ {
+ MvcTextTemplateAssemblyResolver resolver;
+
+ void CreateResolver()
+ {
+ resolver = new MvcTextTemplateAssemblyResolver();
+ }
+
+ [Test]
+ public void Resolve_FullPathToAssemblyPassed_ReturnsFullPathToAssembly()
+ {
+ CreateResolver();
+ string expectedAssemblyPath = @"d:\projects\MyProject\bin\debug\MyProject.dll";
+
+ string resolvedAssemblyPath = resolver.Resolve(expectedAssemblyPath);
+
+ Assert.AreEqual(expectedAssemblyPath, resolvedAssemblyPath);
+ }
+ }
+}
diff --git a/src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/MvcViewFileGeneratorTests.cs b/src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/MvcViewFileGeneratorTests.cs
index 8116f6e037..9f2fb16137 100644
--- a/src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/MvcViewFileGeneratorTests.cs
+++ b/src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/MvcViewFileGeneratorTests.cs
@@ -17,6 +17,7 @@ namespace AspNet.Mvc.Tests
MvcTextTemplateRepository templateRepository;
FakeMvcTextTemplateHostFactory fakeHostFactory;
FakeMvcTextTemplateHost fakeHost;
+ FakeMvcTextTemplateAppDomainFactory fakeAppDomainFactory;
void CreateTemplateRepository(string templateRootDirectory)
{
@@ -33,7 +34,8 @@ namespace AspNet.Mvc.Tests
{
fakeHostFactory = new FakeMvcTextTemplateHostFactory();
fakeHost = fakeHostFactory.FakeMvcTextTemplateHost;
- generator = new MvcViewFileGenerator(fakeHostFactory, templateRepository);
+ fakeAppDomainFactory = new FakeMvcTextTemplateAppDomainFactory();
+ generator = new MvcViewFileGenerator(fakeHostFactory, templateRepository, fakeAppDomainFactory);
projectUsedByGenerator = new FakeMvcProject();
generator.Project = projectUsedByGenerator;
ProjectPassedToGeneratorIsCSharpProject();
@@ -267,5 +269,29 @@ namespace AspNet.Mvc.Tests
Assert.AreEqual(expectedFileName, fileName);
}
+
+ [Test]
+ public void GenerateFile_CSharpEmptyViewTemplate_AppDomainIsDisposed()
+ {
+ CreateGenerator();
+ ProjectPassedToGeneratorIsCSharpProject();
+ GenerateFile();
+ bool disposed = fakeAppDomainFactory.FakeAppDomain.IsDisposed;
+
+ Assert.IsTrue(disposed);
+ }
+
+ [Test]
+ public void GenerateFile_CSharpEmptyViewTemplate_MvcTextTemplateHostIsCreatedWithAppDomain()
+ {
+ CreateGenerator();
+ ProjectPassedToGeneratorIsCSharpProject();
+ GenerateFile();
+
+ IMvcTextTemplateHostAppDomain appDomain = fakeHostFactory.AppDomainPassedToCreateMvcTextTemplateHost;
+ FakeMvcTextTemplateAppDomain expectedAppDomain = fakeAppDomainFactory.FakeAppDomain;
+
+ Assert.AreEqual(expectedAppDomain, appDomain);
+ }
}
}