From 65955bdb284b376012aeccf8ede8fc8fd4e3c55e Mon Sep 17 00:00:00 2001 From: Siegfried Pammer Date: Sat, 15 Jun 2013 16:55:06 +0200 Subject: [PATCH] implement IServiceProvider in ILanguageBinding --- .../Project/Src/CSharpLanguageBinding.cs | 20 +++------ .../CppBinding/CppLanguageBinding.cs | 5 ++- .../Project/Src/XmlLanguageBinding.cs | 5 ++- .../LanguageBinding/DefaultLanguageBinding.cs | 43 +++++++++++++++---- .../LanguageBinding/ILanguageBinding.cs | 2 +- 5 files changed, 47 insertions(+), 28 deletions(-) diff --git a/src/AddIns/BackendBindings/CSharpBinding/Project/Src/CSharpLanguageBinding.cs b/src/AddIns/BackendBindings/CSharpBinding/Project/Src/CSharpLanguageBinding.cs index 3747f73235..0260b26239 100644 --- a/src/AddIns/BackendBindings/CSharpBinding/Project/Src/CSharpLanguageBinding.cs +++ b/src/AddIns/BackendBindings/CSharpBinding/Project/Src/CSharpLanguageBinding.cs @@ -21,20 +21,12 @@ namespace CSharpBinding /// public class CSharpLanguageBinding : DefaultLanguageBinding { - public override IFormattingStrategy FormattingStrategy { - get { return new CSharpFormattingStrategy(); } - } - - public override IBracketSearcher BracketSearcher { - get { return new CSharpBracketSearcher(); } - } - - public override ICodeGenerator CodeGenerator { - get { return new CSharpCodeGenerator(); } - } - - public override System.CodeDom.Compiler.CodeDomProvider CodeDomProvider { - get { return new Microsoft.CSharp.CSharpCodeProvider(); } + public CSharpLanguageBinding() + { + this.container.AddService(typeof(IFormattingStrategy), new CSharpFormattingStrategy()); + this.container.AddService(typeof(IBracketSearcher), new CSharpBracketSearcher()); + this.container.AddService(typeof(ICodeGenerator), new CSharpCodeGenerator()); + this.container.AddService(typeof(System.CodeDom.Compiler.CodeDomProvider), new Microsoft.CSharp.CSharpCodeProvider()); } } diff --git a/src/AddIns/BackendBindings/CppBinding/CppBinding/CppLanguageBinding.cs b/src/AddIns/BackendBindings/CppBinding/CppBinding/CppLanguageBinding.cs index c82222b08f..1d69c5b32c 100644 --- a/src/AddIns/BackendBindings/CppBinding/CppBinding/CppLanguageBinding.cs +++ b/src/AddIns/BackendBindings/CppBinding/CppBinding/CppLanguageBinding.cs @@ -9,8 +9,9 @@ namespace ICSharpCode.CppBinding { public class CppLanguageBinding : DefaultLanguageBinding { - public override IFormattingStrategy FormattingStrategy { - get { return new CppFormattingStrategy(); } + public CppLanguageBinding() + { + this.container.AddService(typeof(IFormattingStrategy), new CppFormattingStrategy()); } } } diff --git a/src/AddIns/DisplayBindings/XmlEditor/Project/Src/XmlLanguageBinding.cs b/src/AddIns/DisplayBindings/XmlEditor/Project/Src/XmlLanguageBinding.cs index 1b94fc6878..e34f3ebb80 100644 --- a/src/AddIns/DisplayBindings/XmlEditor/Project/Src/XmlLanguageBinding.cs +++ b/src/AddIns/DisplayBindings/XmlEditor/Project/Src/XmlLanguageBinding.cs @@ -10,8 +10,9 @@ namespace ICSharpCode.XmlEditor { public class XmlLanguageBinding : DefaultLanguageBinding { - public override IFormattingStrategy FormattingStrategy { - get { return new XmlFormattingStrategy(); } + public XmlLanguageBinding() + { + container.AddService(typeof(IFormattingStrategy), new XmlFormattingStrategy()); } } diff --git a/src/Main/Base/Project/Src/Services/LanguageBinding/DefaultLanguageBinding.cs b/src/Main/Base/Project/Src/Services/LanguageBinding/DefaultLanguageBinding.cs index e3c70eeedf..7b35604b5d 100644 --- a/src/Main/Base/Project/Src/Services/LanguageBinding/DefaultLanguageBinding.cs +++ b/src/Main/Base/Project/Src/Services/LanguageBinding/DefaultLanguageBinding.cs @@ -2,6 +2,7 @@ // This code is distributed under the GNU LGPL (for details please see \doc\license.txt) using System; +using System.ComponentModel.Design; using ICSharpCode.SharpDevelop.Editor; using ICSharpCode.SharpDevelop.Refactoring; @@ -9,30 +10,54 @@ namespace ICSharpCode.SharpDevelop { public class DefaultLanguageBinding : ILanguageBinding { - public static readonly DefaultLanguageBinding DefaultInstance = new DefaultLanguageBinding(); + public static readonly DefaultLanguageBinding DefaultInstance = new DefaultLanguageBinding(true); - public virtual IFormattingStrategy FormattingStrategy { + protected readonly ServiceContainer container; + + DefaultLanguageBinding(bool isDefault) + { + if (isDefault) { + this.container = new ServiceContainer(); + this.container.AddService(typeof(IFormattingStrategy), DefaultFormattingStrategy.DefaultInstance); + this.container.AddService(typeof(IBracketSearcher), DefaultBracketSearcher.DefaultInstance); + this.container.AddService(typeof(ICodeGenerator), DefaultCodeGenerator.DefaultInstance); + } else { + this.container = new ServiceContainer(DefaultInstance); + } + } + + public DefaultLanguageBinding() + : this(false) + { + } + + public IFormattingStrategy FormattingStrategy { get { - return DefaultFormattingStrategy.DefaultInstance; + return this.GetService(); } } - public virtual IBracketSearcher BracketSearcher { + public IBracketSearcher BracketSearcher { get { - return DefaultBracketSearcher.DefaultInstance; + return this.GetService(); } } - public virtual ICodeGenerator CodeGenerator { + public ICodeGenerator CodeGenerator { get { - return DefaultCodeGenerator.DefaultInstance; + return this.GetService(); } } - public virtual System.CodeDom.Compiler.CodeDomProvider CodeDomProvider { + public System.CodeDom.Compiler.CodeDomProvider CodeDomProvider { get { - return null; + return this.GetService(); } } + + public object GetService(Type serviceType) + { + return container.GetService(serviceType); + } } } diff --git a/src/Main/Base/Project/Src/Services/LanguageBinding/ILanguageBinding.cs b/src/Main/Base/Project/Src/Services/LanguageBinding/ILanguageBinding.cs index 2a1fd2ac93..f7051565f8 100644 --- a/src/Main/Base/Project/Src/Services/LanguageBinding/ILanguageBinding.cs +++ b/src/Main/Base/Project/Src/Services/LanguageBinding/ILanguageBinding.cs @@ -10,7 +10,7 @@ namespace ICSharpCode.SharpDevelop /// /// Provides access to language specific features (independent of files). /// - public interface ILanguageBinding + public interface ILanguageBinding : IServiceProvider { /// /// Provides access to the formatting strategy for this language.