diff --git a/src/AddIns/Misc/TextTemplating/Project/Src/TextTemplatingCustomTool.cs b/src/AddIns/Misc/TextTemplating/Project/Src/TextTemplatingCustomTool.cs
index aa8f14f239..9bb20b3825 100644
--- a/src/AddIns/Misc/TextTemplating/Project/Src/TextTemplatingCustomTool.cs
+++ b/src/AddIns/Misc/TextTemplating/Project/Src/TextTemplatingCustomTool.cs
@@ -17,7 +17,8 @@ namespace ICSharpCode.TextTemplating
string applicationBase = GetAssemblyBaseLocation();
var assemblyResolver = new TextTemplatingAssemblyResolver(project);
var textTemplatingVariables = new TextTemplatingVariables();
- var host = new TextTemplatingHost(appDomainFactory, assemblyResolver, textTemplatingVariables, applicationBase);
+ var serviceProvider = new TextTemplatingServiceProvider();
+ var host = new TextTemplatingHost(appDomainFactory, assemblyResolver, textTemplatingVariables, serviceProvider, applicationBase);
return host;
}
diff --git a/src/AddIns/Misc/TextTemplating/Project/Src/TextTemplatingHost.cs b/src/AddIns/Misc/TextTemplating/Project/Src/TextTemplatingHost.cs
index f25e201911..71dbb59852 100644
--- a/src/AddIns/Misc/TextTemplating/Project/Src/TextTemplatingHost.cs
+++ b/src/AddIns/Misc/TextTemplating/Project/Src/TextTemplatingHost.cs
@@ -6,23 +6,26 @@ using Mono.TextTemplating;
namespace ICSharpCode.TextTemplating
{
- public class TextTemplatingHost : TemplateGenerator, ITextTemplatingHost
+ public class TextTemplatingHost : TemplateGenerator, ITextTemplatingHost, IServiceProvider
{
ITextTemplatingAppDomainFactory appDomainFactory;
ITextTemplatingAppDomain templatingAppDomain;
ITextTemplatingAssemblyResolver assemblyResolver;
ITextTemplatingVariables templatingVariables;
+ IServiceProvider serviceProvider;
string applicationBase;
public TextTemplatingHost(
ITextTemplatingAppDomainFactory appDomainFactory,
ITextTemplatingAssemblyResolver assemblyResolver,
ITextTemplatingVariables templatingVariables,
+ IServiceProvider serviceProvider,
string applicationBase)
{
this.appDomainFactory = appDomainFactory;
this.assemblyResolver = assemblyResolver;
this.templatingVariables = templatingVariables;
+ this.serviceProvider = serviceProvider;
this.applicationBase = applicationBase;
}
@@ -62,5 +65,10 @@ namespace ICSharpCode.TextTemplating
{
return templatingVariables.ExpandVariables(path);
}
+
+ object IServiceProvider.GetService(Type serviceType)
+ {
+ return serviceProvider.GetService(serviceType);
+ }
}
}
diff --git a/src/AddIns/Misc/TextTemplating/Project/Src/TextTemplatingServiceProvider.cs b/src/AddIns/Misc/TextTemplating/Project/Src/TextTemplatingServiceProvider.cs
new file mode 100644
index 0000000000..11f4d0095c
--- /dev/null
+++ b/src/AddIns/Misc/TextTemplating/Project/Src/TextTemplatingServiceProvider.cs
@@ -0,0 +1,15 @@
+// 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;
+
+namespace ICSharpCode.TextTemplating
+{
+ public class TextTemplatingServiceProvider : IServiceProvider
+ {
+ public object GetService(Type serviceType)
+ {
+ return serviceType.Assembly.CreateInstance(serviceType.FullName);
+ }
+ }
+}
diff --git a/src/AddIns/Misc/TextTemplating/Project/TextTemplating.csproj b/src/AddIns/Misc/TextTemplating/Project/TextTemplating.csproj
index 67fee77c77..02116dbbdf 100644
--- a/src/AddIns/Misc/TextTemplating/Project/TextTemplating.csproj
+++ b/src/AddIns/Misc/TextTemplating/Project/TextTemplating.csproj
@@ -83,6 +83,7 @@
+
diff --git a/src/AddIns/Misc/TextTemplating/Test/Helpers/FakeServiceProvider.cs b/src/AddIns/Misc/TextTemplating/Test/Helpers/FakeServiceProvider.cs
new file mode 100644
index 0000000000..86de1d9946
--- /dev/null
+++ b/src/AddIns/Misc/TextTemplating/Test/Helpers/FakeServiceProvider.cs
@@ -0,0 +1,25 @@
+// 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.Collections.Generic;
+
+namespace TextTemplating.Tests.Helpers
+{
+ public class FakeServiceProvider : IServiceProvider
+ {
+ public Dictionary Services = new Dictionary();
+
+ public void AddService(Type serviceType, object service)
+ {
+ Services.Add(serviceType, service);
+ }
+
+ public object GetService(Type serviceType)
+ {
+ object service = null;
+ Services.TryGetValue(serviceType, out service);
+ return service;
+ }
+ }
+}
diff --git a/src/AddIns/Misc/TextTemplating/Test/Helpers/TestableTextTemplatingHost.cs b/src/AddIns/Misc/TextTemplating/Test/Helpers/TestableTextTemplatingHost.cs
index e60b150b35..8e22d5d10a 100644
--- a/src/AddIns/Misc/TextTemplating/Test/Helpers/TestableTextTemplatingHost.cs
+++ b/src/AddIns/Misc/TextTemplating/Test/Helpers/TestableTextTemplatingHost.cs
@@ -11,12 +11,14 @@ namespace TextTemplating.Tests.Helpers
public FakeTextTemplatingAppDomainFactory FakeTextTemplatingAppDomainFactory;
public FakeTextTemplatingAssemblyResolver FakeTextTemplatingAssemblyResolver;
public FakeTextTemplatingVariables FakeTextTemplatingVariables;
+ public FakeServiceProvider FakeServiceProvider;
public TestableTextTemplatingHost(string applicationBase)
: this(
new FakeTextTemplatingAppDomainFactory(),
new FakeTextTemplatingAssemblyResolver(),
new FakeTextTemplatingVariables(),
+ new FakeServiceProvider(),
applicationBase)
{
}
@@ -25,12 +27,14 @@ namespace TextTemplating.Tests.Helpers
FakeTextTemplatingAppDomainFactory appDomainFactory,
FakeTextTemplatingAssemblyResolver assemblyResolver,
FakeTextTemplatingVariables textTemplatingVariables,
+ FakeServiceProvider fakeServiceProvider,
string applicationBase)
- : base(appDomainFactory, assemblyResolver, textTemplatingVariables, applicationBase)
+ : base(appDomainFactory, assemblyResolver, textTemplatingVariables, fakeServiceProvider, applicationBase)
{
FakeTextTemplatingAppDomainFactory = appDomainFactory;
FakeTextTemplatingAssemblyResolver = assemblyResolver;
FakeTextTemplatingVariables = textTemplatingVariables;
+ FakeServiceProvider = fakeServiceProvider;
}
public string CallResolveAssemblyReference(string assemblyReference)
diff --git a/src/AddIns/Misc/TextTemplating/Test/Src/TextTemplatingHostTests.cs b/src/AddIns/Misc/TextTemplating/Test/Src/TextTemplatingHostTests.cs
index f67d1c4dc6..681ba9b1ed 100644
--- a/src/AddIns/Misc/TextTemplating/Test/Src/TextTemplatingHostTests.cs
+++ b/src/AddIns/Misc/TextTemplating/Test/Src/TextTemplatingHostTests.cs
@@ -17,6 +17,7 @@ namespace TextTemplating.Tests
FakeTextTemplatingAppDomain fakeTextTemplatingAppDomain;
FakeTextTemplatingAssemblyResolver fakeAssemblyResolver;
FakeTextTemplatingVariables fakeTextTemplatingVariables;
+ FakeServiceProvider fakeServiceProvider;
void CreateHost()
{
@@ -30,6 +31,7 @@ namespace TextTemplating.Tests
fakeTextTemplatingAppDomain = fakeTextTemplatingAppDomainFactory.FakeTextTemplatingAppDomain;
fakeAssemblyResolver = host.FakeTextTemplatingAssemblyResolver;
fakeTextTemplatingVariables = host.FakeTextTemplatingVariables;
+ fakeServiceProvider = host.FakeServiceProvider;
}
void AddTemplateVariableValue(string variableName, string variableValue)
@@ -127,6 +129,19 @@ namespace TextTemplating.Tests
string path = host.CallResolvePath("$(SolutionDir)");
Assert.AreEqual(@"d:\projects\MySolution\", path);
- }
+ }
+
+ [Test]
+ public void GetService_HostPassedFakeServiceProvider_ReturnsServiceFromFakeServiceProvider()
+ {
+ CreateHost();
+ var expectedService = new StringWriter();
+ fakeServiceProvider.AddService(typeof(StringWriter), expectedService);
+
+ var hostServiceProvider = host as IServiceProvider;
+ StringWriter service = hostServiceProvider.GetService(typeof(StringWriter)) as StringWriter;
+
+ Assert.AreEqual(expectedService, service);
+ }
}
}
diff --git a/src/AddIns/Misc/TextTemplating/Test/Src/TextTemplatingServiceProviderTests.cs b/src/AddIns/Misc/TextTemplating/Test/Src/TextTemplatingServiceProviderTests.cs
new file mode 100644
index 0000000000..d8393b457a
--- /dev/null
+++ b/src/AddIns/Misc/TextTemplating/Test/Src/TextTemplatingServiceProviderTests.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.TextTemplating;
+using NUnit.Framework;
+using TextTemplating.Tests.Helpers;
+
+namespace TextTemplating.Tests
+{
+ [TestFixture]
+ public class TextTemplatingServiceProviderTests
+ {
+ TextTemplatingServiceProvider serviceProvider;
+
+ void CreateServiceProvider()
+ {
+ serviceProvider = new TextTemplatingServiceProvider();
+ }
+
+ [Test]
+ public void GetService_TypeOfFakeServiceProvider_ReturnsNewFakeServiceProvider()
+ {
+ CreateServiceProvider();
+ FakeServiceProvider service = serviceProvider.GetService(typeof(FakeServiceProvider)) as FakeServiceProvider;
+
+ Assert.IsNotNull(service);
+ }
+ }
+}
diff --git a/src/AddIns/Misc/TextTemplating/Test/TextTemplating.Tests.csproj b/src/AddIns/Misc/TextTemplating/Test/TextTemplating.Tests.csproj
index 6e665604eb..bddd0bf396 100644
--- a/src/AddIns/Misc/TextTemplating/Test/TextTemplating.Tests.csproj
+++ b/src/AddIns/Misc/TextTemplating/Test/TextTemplating.Tests.csproj
@@ -57,6 +57,7 @@
+
@@ -84,6 +85,7 @@
+