Browse Source

Refactor T4 templating host.

pull/23/head
Matt Ward 15 years ago
parent
commit
2b2e71632e
  1. 4
      src/AddIns/Misc/TextTemplating/Project/Src/TextTemplatingCustomTool.cs
  2. 25
      src/AddIns/Misc/TextTemplating/Project/Src/TextTemplatingHost.cs
  3. 57
      src/AddIns/Misc/TextTemplating/Project/Src/TextTemplatingHostContext.cs
  4. 1
      src/AddIns/Misc/TextTemplating/Project/TextTemplating.csproj
  5. 10
      src/AddIns/Misc/TextTemplating/Test/Helpers/TestableTextTemplatingHost.cs

4
src/AddIns/Misc/TextTemplating/Project/Src/TextTemplatingCustomTool.cs

@ -18,8 +18,8 @@ namespace ICSharpCode.TextTemplating
var assemblyResolver = new TextTemplatingAssemblyResolver(project); var assemblyResolver = new TextTemplatingAssemblyResolver(project);
var textTemplatingVariables = new TextTemplatingVariables(); var textTemplatingVariables = new TextTemplatingVariables();
var serviceProvider = new TextTemplatingServiceProvider(); var serviceProvider = new TextTemplatingServiceProvider();
var host = new TextTemplatingHost(appDomainFactory, assemblyResolver, textTemplatingVariables, serviceProvider, applicationBase); var context = new TextTemplatingHostContext(project);
return host; return new TextTemplatingHost(context, applicationBase);
} }
string GetAssemblyBaseLocation() string GetAssemblyBaseLocation()

25
src/AddIns/Misc/TextTemplating/Project/Src/TextTemplatingHost.cs

@ -8,24 +8,13 @@ namespace ICSharpCode.TextTemplating
{ {
public class TextTemplatingHost : TemplateGenerator, ITextTemplatingHost, IServiceProvider public class TextTemplatingHost : TemplateGenerator, ITextTemplatingHost, IServiceProvider
{ {
ITextTemplatingAppDomainFactory appDomainFactory;
ITextTemplatingAppDomain templatingAppDomain; ITextTemplatingAppDomain templatingAppDomain;
ITextTemplatingAssemblyResolver assemblyResolver; TextTemplatingHostContext context;
ITextTemplatingVariables templatingVariables;
IServiceProvider serviceProvider;
string applicationBase; string applicationBase;
public TextTemplatingHost( public TextTemplatingHost(TextTemplatingHostContext context, string applicationBase)
ITextTemplatingAppDomainFactory appDomainFactory,
ITextTemplatingAssemblyResolver assemblyResolver,
ITextTemplatingVariables templatingVariables,
IServiceProvider serviceProvider,
string applicationBase)
{ {
this.appDomainFactory = appDomainFactory; this.context = context;
this.assemblyResolver = assemblyResolver;
this.templatingVariables = templatingVariables;
this.serviceProvider = serviceProvider;
this.applicationBase = applicationBase; this.applicationBase = applicationBase;
} }
@ -47,12 +36,12 @@ namespace ICSharpCode.TextTemplating
void CreateAppDomain() void CreateAppDomain()
{ {
templatingAppDomain = appDomainFactory.CreateTextTemplatingAppDomain(applicationBase); templatingAppDomain = context.CreateTextTemplatingAppDomain(applicationBase);
} }
protected override string ResolveAssemblyReference(string assemblyReference) protected override string ResolveAssemblyReference(string assemblyReference)
{ {
return assemblyResolver.Resolve(assemblyReference); return context.ResolveAssemblyReference(assemblyReference);
} }
protected override string ResolvePath(string path) protected override string ResolvePath(string path)
@ -63,12 +52,12 @@ namespace ICSharpCode.TextTemplating
string ExpandPath(string path) string ExpandPath(string path)
{ {
return templatingVariables.ExpandVariables(path); return context.ExpandTemplateVariables(path);
} }
object IServiceProvider.GetService(Type serviceType) object IServiceProvider.GetService(Type serviceType)
{ {
return serviceProvider.GetService(serviceType); return context.GetService(serviceType);
} }
} }
} }

57
src/AddIns/Misc/TextTemplating/Project/Src/TextTemplatingHostContext.cs

@ -0,0 +1,57 @@
// 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.SharpDevelop.Project;
namespace ICSharpCode.TextTemplating
{
public class TextTemplatingHostContext
{
ITextTemplatingAppDomainFactory appDomainFactory;
ITextTemplatingAssemblyResolver assemblyResolver;
ITextTemplatingVariables templatingVariables;
IServiceProvider serviceProvider;
public TextTemplatingHostContext(IProject project)
: this(
new TextTemplatingAppDomainFactory(),
new TextTemplatingAssemblyResolver(project),
new TextTemplatingVariables(),
new TextTemplatingServiceProvider())
{
}
public TextTemplatingHostContext(
ITextTemplatingAppDomainFactory appDomainFactory,
ITextTemplatingAssemblyResolver assemblyResolver,
ITextTemplatingVariables templatingVariables,
IServiceProvider serviceProvider)
{
this.appDomainFactory = appDomainFactory;
this.assemblyResolver = assemblyResolver;
this.templatingVariables = templatingVariables;
this.serviceProvider = serviceProvider;
}
public object GetService(Type serviceType)
{
return serviceProvider.GetService(serviceType);
}
public string ExpandTemplateVariables(string name)
{
return templatingVariables.ExpandVariables(name);
}
public ITextTemplatingAppDomain CreateTextTemplatingAppDomain(string applicationBase)
{
return appDomainFactory.CreateTextTemplatingAppDomain(applicationBase);
}
public string ResolveAssemblyReference(string assemblyReference)
{
return assemblyResolver.Resolve(assemblyReference);
}
}
}

1
src/AddIns/Misc/TextTemplating/Project/TextTemplating.csproj

@ -81,6 +81,7 @@
<Compile Include="Src\TextTemplatingFilePreprocessorCustomTool.cs" /> <Compile Include="Src\TextTemplatingFilePreprocessorCustomTool.cs" />
<Compile Include="Src\TextTemplatingFileProcessor.cs" /> <Compile Include="Src\TextTemplatingFileProcessor.cs" />
<Compile Include="Src\TextTemplatingHost.cs" /> <Compile Include="Src\TextTemplatingHost.cs" />
<Compile Include="Src\TextTemplatingHostContext.cs" />
<Compile Include="Src\TextTemplatingPathResolver.cs" /> <Compile Include="Src\TextTemplatingPathResolver.cs" />
<Compile Include="Src\TextTemplatingReflectionProjectContent.cs" /> <Compile Include="Src\TextTemplatingReflectionProjectContent.cs" />
<Compile Include="Src\TextTemplatingServiceProvider.cs" /> <Compile Include="Src\TextTemplatingServiceProvider.cs" />

10
src/AddIns/Misc/TextTemplating/Test/Helpers/TestableTextTemplatingHost.cs

@ -12,6 +12,7 @@ namespace TextTemplating.Tests.Helpers
public FakeTextTemplatingAssemblyResolver FakeTextTemplatingAssemblyResolver; public FakeTextTemplatingAssemblyResolver FakeTextTemplatingAssemblyResolver;
public FakeTextTemplatingVariables FakeTextTemplatingVariables; public FakeTextTemplatingVariables FakeTextTemplatingVariables;
public FakeServiceProvider FakeServiceProvider; public FakeServiceProvider FakeServiceProvider;
public TextTemplatingHostContext HostContext;
public TestableTextTemplatingHost(string applicationBase) public TestableTextTemplatingHost(string applicationBase)
: this( : this(
@ -29,13 +30,20 @@ namespace TextTemplating.Tests.Helpers
FakeTextTemplatingVariables textTemplatingVariables, FakeTextTemplatingVariables textTemplatingVariables,
FakeServiceProvider fakeServiceProvider, FakeServiceProvider fakeServiceProvider,
string applicationBase) string applicationBase)
: base(appDomainFactory, assemblyResolver, textTemplatingVariables, fakeServiceProvider, applicationBase) : this(
new TextTemplatingHostContext(appDomainFactory, assemblyResolver, textTemplatingVariables, fakeServiceProvider),
applicationBase)
{ {
FakeTextTemplatingAppDomainFactory = appDomainFactory; FakeTextTemplatingAppDomainFactory = appDomainFactory;
FakeTextTemplatingAssemblyResolver = assemblyResolver; FakeTextTemplatingAssemblyResolver = assemblyResolver;
FakeTextTemplatingVariables = textTemplatingVariables; FakeTextTemplatingVariables = textTemplatingVariables;
FakeServiceProvider = fakeServiceProvider; FakeServiceProvider = fakeServiceProvider;
} }
public TestableTextTemplatingHost(TextTemplatingHostContext context, string applicationBase)
: base(context, applicationBase)
{
}
public string CallResolveAssemblyReference(string assemblyReference) public string CallResolveAssemblyReference(string assemblyReference)
{ {

Loading…
Cancel
Save