From 4fdecf04c5fb8dfed8520110cb9b4ed86792b0d8 Mon Sep 17 00:00:00 2001 From: Louis DeJardin Date: Fri, 25 Jun 2010 14:41:19 -0700 Subject: [PATCH] Refactoring data builders into data service providers IDataServicesProviderFactory used to build correct IDataServicesProvider instance Components implementing IDataServiceProvider must also have public static ProviderName {get;} to be identified The data service provider, for now, has the responsability of creating the ISessionFactory for a shell --HG-- branch : dev --- ...TraceEnabledDataServicesProviderFactory.cs | 22 +++++++++ .../TraceEnabledSessionFactoryBuilder.cs | 25 ---------- src/Orchard.Specs/Orchard.Specs.csproj | 2 +- .../Builders/SessionFactoryBuilderTests.cs | 48 ++++++++++++------- src/Orchard.Tests/DataUtility.cs | 4 +- .../Views/Admin/Edit.ascx | 2 +- .../Views/EditorTemplates/Part.ascx | 2 +- .../Modules/Orchard.Setup/SetupMode.cs | 4 +- .../Data/Builders/ISessionFactoryBuilder.cs | 23 --------- .../Data/Builders/SessionFactoryBuilder.cs | 17 ------- src/Orchard/Data/DataModule.cs | 14 +++++- .../AbstractDataServicesProvider.cs} | 9 ++-- .../Data/Providers/DataServiceParameters.cs | 7 +++ .../Providers/DataServicesProviderFactory.cs | 35 ++++++++++++++ .../Data/Providers/IDataServicesProvider.cs | 7 +++ .../Providers/IDataServicesProviderFactory.cs | 14 ++++++ .../SQLiteDataServicesProvider.cs} | 10 ++-- .../Providers/SessionFactoryParameters.cs | 10 ++++ .../SqlServerDataServicesProvider.cs} | 10 ++-- src/Orchard/Data/SessionFactoryHolder.cs | 10 ++-- src/Orchard/Orchard.Framework.csproj | 13 +++-- 21 files changed, 177 insertions(+), 111 deletions(-) create mode 100644 src/Orchard.Specs/Hosting/TraceEnabledDataServicesProviderFactory.cs delete mode 100644 src/Orchard.Specs/Hosting/TraceEnabledSessionFactoryBuilder.cs delete mode 100644 src/Orchard/Data/Builders/ISessionFactoryBuilder.cs delete mode 100644 src/Orchard/Data/Builders/SessionFactoryBuilder.cs rename src/Orchard/Data/{Builders/AbstractBuilder.cs => Providers/AbstractDataServicesProvider.cs} (92%) create mode 100644 src/Orchard/Data/Providers/DataServiceParameters.cs create mode 100644 src/Orchard/Data/Providers/DataServicesProviderFactory.cs create mode 100644 src/Orchard/Data/Providers/IDataServicesProvider.cs create mode 100644 src/Orchard/Data/Providers/IDataServicesProviderFactory.cs rename src/Orchard/Data/{Builders/SQLiteBuilder.cs => Providers/SQLiteDataServicesProvider.cs} (75%) create mode 100644 src/Orchard/Data/Providers/SessionFactoryParameters.cs rename src/Orchard/Data/{Builders/SqlServerBuilder.cs => Providers/SqlServerDataServicesProvider.cs} (67%) diff --git a/src/Orchard.Specs/Hosting/TraceEnabledDataServicesProviderFactory.cs b/src/Orchard.Specs/Hosting/TraceEnabledDataServicesProviderFactory.cs new file mode 100644 index 000000000..18712a91a --- /dev/null +++ b/src/Orchard.Specs/Hosting/TraceEnabledDataServicesProviderFactory.cs @@ -0,0 +1,22 @@ +using System; +using FluentNHibernate.Cfg.Db; +using NHibernate; +using Orchard.Data.Providers; + +namespace Orchard.Specs.Hosting { + public class TraceEnabledDataServicesProviderFactory : IDataServicesProviderFactory { + public IDataServicesProvider CreateProvider(DataServiceParameters sessionFactoryParameters) { + return new TraceEnabledBuilder(sessionFactoryParameters.DataFolder, sessionFactoryParameters.ConnectionString); + } + + class TraceEnabledBuilder : SQLiteDataServicesProvider { + public TraceEnabledBuilder(string dataFolder, string connectionString) : base(dataFolder, connectionString) { + } + protected override IPersistenceConfigurer GetPersistenceConfigurer(bool createDatabase) { + var config = (SQLiteConfiguration)base.GetPersistenceConfigurer(createDatabase); + //config.ShowSql(); + return config; + } + } + } +} \ No newline at end of file diff --git a/src/Orchard.Specs/Hosting/TraceEnabledSessionFactoryBuilder.cs b/src/Orchard.Specs/Hosting/TraceEnabledSessionFactoryBuilder.cs deleted file mode 100644 index cb82f295a..000000000 --- a/src/Orchard.Specs/Hosting/TraceEnabledSessionFactoryBuilder.cs +++ /dev/null @@ -1,25 +0,0 @@ -using FluentNHibernate.Cfg.Db; -using NHibernate; -using Orchard.Data.Builders; - -namespace Orchard.Specs.Hosting { - public class TraceEnabledSessionFactoryBuilder : ISessionFactoryBuilder { - public TraceEnabledSessionFactoryBuilder() { - - } - public ISessionFactory BuildSessionFactory(SessionFactoryParameters parameters) { - var builder = new TraceEnabledBuilder(parameters.DataFolder, parameters.ConnectionString); - return builder.BuildSessionFactory(parameters); - } - - class TraceEnabledBuilder : SQLiteBuilder { - public TraceEnabledBuilder(string dataFolder, string connectionString) : base(dataFolder, connectionString) { - } - protected override IPersistenceConfigurer GetPersistenceConfigurer(bool createDatabase) { - var config = (SQLiteConfiguration)base.GetPersistenceConfigurer(createDatabase); - //config.ShowSql(); - return config; - } - } - } -} \ No newline at end of file diff --git a/src/Orchard.Specs/Orchard.Specs.csproj b/src/Orchard.Specs/Orchard.Specs.csproj index a9c886fc1..dc752154e 100644 --- a/src/Orchard.Specs/Orchard.Specs.csproj +++ b/src/Orchard.Specs/Orchard.Specs.csproj @@ -129,7 +129,7 @@ - + diff --git a/src/Orchard.Tests/Data/Builders/SessionFactoryBuilderTests.cs b/src/Orchard.Tests/Data/Builders/SessionFactoryBuilderTests.cs index 4ba18c3b0..4eab56b43 100644 --- a/src/Orchard.Tests/Data/Builders/SessionFactoryBuilderTests.cs +++ b/src/Orchard.Tests/Data/Builders/SessionFactoryBuilderTests.cs @@ -1,7 +1,9 @@ -using System.Data.SqlClient; +using System.Collections.Generic; +using System.Data.SqlClient; using System.IO; +using Autofac.Features.Metadata; using NUnit.Framework; -using Orchard.Data.Builders; +using Orchard.Data.Providers; using Orchard.Environment.Descriptor; using Orchard.Environment.Descriptor.Models; using Orchard.Environment.ShellBuilders.Models; @@ -50,19 +52,25 @@ namespace Orchard.Tests.Data.Builders { [Test] public void SQLiteSchemaShouldBeGeneratedAndUsable() { var recordDescriptors = new[] { - new RecordBlueprint {TableName = "Hello", Type = typeof (FooRecord)} - }; - var manager = (ISessionFactoryBuilder)new SessionFactoryBuilder(); + new RecordBlueprint {TableName = "Hello", Type = typeof (FooRecord)} + }; + + var manager = (IDataServicesProviderFactory) new DataServicesProviderFactory(new[] { + new Meta( + (dataFolder, connectionString) => new SQLiteDataServicesProvider(dataFolder, connectionString), + new Dictionary {{"ProviderName", "SQLite"}}) + }); + var sessionFactory = manager.BuildSessionFactory(new SessionFactoryParameters { - Provider = "SQLite", - DataFolder = _tempDataFolder, - UpdateSchema = true, - RecordDescriptors = recordDescriptors - }); + Provider = "SQLite", + DataFolder = _tempDataFolder, + UpdateSchema = true, + RecordDescriptors = recordDescriptors + }); var session = sessionFactory.OpenSession(); - var foo = new FooRecord { Name = "hi there" }; + var foo = new FooRecord {Name = "hi there"}; session.Save(foo); session.Flush(); session.Close(); @@ -82,14 +90,18 @@ namespace Orchard.Tests.Data.Builders { new RecordBlueprint {TableName = "Hello", Type = typeof (FooRecord)} }; - var manager = (ISessionFactoryBuilder)new SessionFactoryBuilder(); + var manager = (IDataServicesProviderFactory)new DataServicesProviderFactory(new[] { + new Meta( + (dataFolder, connectionString) => new SqlServerDataServicesProvider(dataFolder, connectionString), + new Dictionary {{"ProviderName", "SqlServer"}}) + }); var sessionFactory = manager.BuildSessionFactory(new SessionFactoryParameters { - Provider = "SqlServer", - DataFolder = _tempDataFolder, - ConnectionString = "Data Source=.\\SQLEXPRESS;AttachDbFileName=" + databasePath + ";Integrated Security=True;User Instance=True;", - UpdateSchema = true, - RecordDescriptors = recordDescriptors, - }); + Provider = "SqlServer", + DataFolder = _tempDataFolder, + ConnectionString = "Data Source=.\\SQLEXPRESS;AttachDbFileName=" + databasePath + ";Integrated Security=True;User Instance=True;", + UpdateSchema = true, + RecordDescriptors = recordDescriptors, + }); diff --git a/src/Orchard.Tests/DataUtility.cs b/src/Orchard.Tests/DataUtility.cs index bc49e502d..7b0c558d0 100644 --- a/src/Orchard.Tests/DataUtility.cs +++ b/src/Orchard.Tests/DataUtility.cs @@ -8,7 +8,7 @@ using FluentNHibernate.Cfg.Db; using NHibernate; using NHibernate.Tool.hbm2ddl; using Orchard.Data; -using Orchard.Data.Builders; +using Orchard.Data.Providers; using Orchard.Environment.Descriptor.Models; using Orchard.Environment.ShellBuilders.Models; @@ -19,7 +19,7 @@ namespace Orchard.Tests { //var persistenceModel = AutoMap.Source(new Types(types)) // .Alterations(alt => AddAlterations(alt, types)) // .Conventions.AddFromAssemblyOf(); - var persistenceModel = AbstractBuilder.CreatePersistenceModel(types.Select(t => new RecordBlueprint { TableName = "Test_" + t.Name,Type = t })); + var persistenceModel = AbstractDataServicesProvider.CreatePersistenceModel(types.Select(t => new RecordBlueprint { TableName = "Test_" + t.Name,Type = t })); return Fluently.Configure() .Database(SQLiteConfiguration.Standard.UsingFile(fileName).ShowSql()) diff --git a/src/Orchard.Web/Modules/Orchard.ContentTypes/Views/Admin/Edit.ascx b/src/Orchard.Web/Modules/Orchard.ContentTypes/Views/Admin/Edit.ascx index 4e7299714..25b341ceb 100644 --- a/src/Orchard.Web/Modules/Orchard.ContentTypes/Views/Admin/Edit.ascx +++ b/src/Orchard.Web/Modules/Orchard.ContentTypes/Views/Admin/Edit.ascx @@ -14,7 +14,7 @@ using (Html.BeginFormAntiForgeryPost()) { %> <%:Html.TextBoxFor(m => m.Name, new {@class = "textMedium", disabled = "disabled"}) %> <%:Html.HiddenFor(m => m.Name) %> - <% Html.RenderTemplate(Model.Templates); %> + <% Html.RenderTemplates(Model.Templates); %>

<%:T("Parts") %>

<%: Html.ActionLink(T("Add").Text, "AddPart", new { }, new { @class = "button" }) %>
<%:Html.EditorFor(m => m.Parts, "Parts", "") %> diff --git a/src/Orchard.Web/Modules/Orchard.ContentTypes/Views/EditorTemplates/Part.ascx b/src/Orchard.Web/Modules/Orchard.ContentTypes/Views/EditorTemplates/Part.ascx index 53e44cb7b..7134ac5c4 100644 --- a/src/Orchard.Web/Modules/Orchard.ContentTypes/Views/EditorTemplates/Part.ascx +++ b/src/Orchard.Web/Modules/Orchard.ContentTypes/Views/EditorTemplates/Part.ascx @@ -12,7 +12,7 @@ <% } %> --%> - <% Html.RenderTemplate(Model.Templates); %> + <% Html.RenderTemplates(Model.Templates); %>

<%:T("Global configuration") %>

<%:Html.ActionLink(T("Edit").Text, "EditPart", new { area = "Orchard.ContentTypes", id = Model.PartDefinition.Name }) %>
diff --git a/src/Orchard.Web/Modules/Orchard.Setup/SetupMode.cs b/src/Orchard.Web/Modules/Orchard.Setup/SetupMode.cs index b148e45a5..4c27ad19d 100644 --- a/src/Orchard.Web/Modules/Orchard.Setup/SetupMode.cs +++ b/src/Orchard.Web/Modules/Orchard.Setup/SetupMode.cs @@ -8,7 +8,7 @@ using Orchard.Commands.Builtin; using Orchard.ContentManagement; using Orchard.ContentManagement.Handlers; using Orchard.ContentManagement.MetaData.Builders; -using Orchard.Data.Builders; +using Orchard.Data.Providers; using Orchard.Environment.Extensions; using Orchard.Localization; using Orchard.Mvc; @@ -41,7 +41,7 @@ namespace Orchard.Setup { builder.RegisterType().As().InstancePerLifetimeScope(); builder.RegisterType().As().InstancePerLifetimeScope(); builder.RegisterType().As().InstancePerLifetimeScope(); - builder.RegisterType().As().InstancePerLifetimeScope(); + builder.RegisterType().As().InstancePerLifetimeScope(); builder.RegisterType().As().InstancePerLifetimeScope(); builder.RegisterType().As().InstancePerLifetimeScope(); diff --git a/src/Orchard/Data/Builders/ISessionFactoryBuilder.cs b/src/Orchard/Data/Builders/ISessionFactoryBuilder.cs deleted file mode 100644 index 57fe5152f..000000000 --- a/src/Orchard/Data/Builders/ISessionFactoryBuilder.cs +++ /dev/null @@ -1,23 +0,0 @@ -using System.Collections.Generic; -using NHibernate; -using Orchard.Environment.Descriptor; -using Orchard.Environment.Descriptor.Models; -using Orchard.Environment.ShellBuilders.Models; - -namespace Orchard.Data.Builders { - - public interface ISessionFactoryBuilder : IDependency { - ISessionFactory BuildSessionFactory(SessionFactoryParameters sessionFactoryParameters); - } - - public class SessionFactoryParameters { - public string Provider { get; set; } - public string DataFolder { get; set; } - public string ConnectionString { get; set; } - - public bool CreateDatabase { get; set; } - public bool UpdateSchema { get; set; } - - public IEnumerable RecordDescriptors { get; set; } - } -} diff --git a/src/Orchard/Data/Builders/SessionFactoryBuilder.cs b/src/Orchard/Data/Builders/SessionFactoryBuilder.cs deleted file mode 100644 index b4b0cf7a1..000000000 --- a/src/Orchard/Data/Builders/SessionFactoryBuilder.cs +++ /dev/null @@ -1,17 +0,0 @@ -using System; -using NHibernate; - -namespace Orchard.Data.Builders { - public class SessionFactoryBuilder : ISessionFactoryBuilder { - public ISessionFactory BuildSessionFactory(SessionFactoryParameters parameters) { - AbstractBuilder builder; - if (string.Equals(parameters.Provider, "SQLite", StringComparison.InvariantCultureIgnoreCase)) { - builder = new SQLiteBuilder(parameters.DataFolder, parameters.ConnectionString); - } - else { - builder = new SqlServerBuilder(parameters.DataFolder, parameters.ConnectionString); - } - return builder.BuildSessionFactory(parameters); - } - } -} diff --git a/src/Orchard/Data/DataModule.cs b/src/Orchard/Data/DataModule.cs index aea7b02b4..c65b8a434 100644 --- a/src/Orchard/Data/DataModule.cs +++ b/src/Orchard/Data/DataModule.cs @@ -1,9 +1,21 @@ -using Autofac; +using System.Reflection; +using Autofac; +using Orchard.Data.Providers; +using Module = Autofac.Module; namespace Orchard.Data { public class DataModule : Module { protected override void Load(ContainerBuilder builder) { builder.RegisterGeneric(typeof(Repository<>)).As(typeof(IRepository<>)).InstancePerDependency(); + + } + protected override void AttachToComponentRegistration(Autofac.Core.IComponentRegistry componentRegistry, Autofac.Core.IComponentRegistration registration) { + if (typeof(IDataServicesProvider).IsAssignableFrom(registration.Activator.LimitType)) { + var propertyInfo = registration.Activator.LimitType.GetProperty("ProviderName", BindingFlags.Static | BindingFlags.Public); + if (propertyInfo != null) { + registration.Metadata["ProviderName"] = propertyInfo.GetValue(null, null); + } + } } } } \ No newline at end of file diff --git a/src/Orchard/Data/Builders/AbstractBuilder.cs b/src/Orchard/Data/Providers/AbstractDataServicesProvider.cs similarity index 92% rename from src/Orchard/Data/Builders/AbstractBuilder.cs rename to src/Orchard/Data/Providers/AbstractDataServicesProvider.cs index 6a4e9bceb..f32517e88 100644 --- a/src/Orchard/Data/Builders/AbstractBuilder.cs +++ b/src/Orchard/Data/Providers/AbstractDataServicesProvider.cs @@ -11,12 +11,11 @@ using NHibernate.Cfg; using NHibernate.Tool.hbm2ddl; using Orchard.ContentManagement.Records; using Orchard.Data.Conventions; -using Orchard.Environment.Descriptor; -using Orchard.Environment.Descriptor.Models; using Orchard.Environment.ShellBuilders.Models; -namespace Orchard.Data.Builders { - public abstract class AbstractBuilder { +namespace Orchard.Data.Providers { + public abstract class AbstractDataServicesProvider : IDataServicesProvider { + protected abstract IPersistenceConfigurer GetPersistenceConfigurer(bool createDatabase); public ISessionFactory BuildSessionFactory(SessionFactoryParameters parameters) { @@ -67,5 +66,7 @@ namespace Orchard.Data.Builders { public IEnumerable GetTypes() { return _recordDescriptors.Select(descriptor => descriptor.Type); } } + + } } \ No newline at end of file diff --git a/src/Orchard/Data/Providers/DataServiceParameters.cs b/src/Orchard/Data/Providers/DataServiceParameters.cs new file mode 100644 index 000000000..66a335d49 --- /dev/null +++ b/src/Orchard/Data/Providers/DataServiceParameters.cs @@ -0,0 +1,7 @@ +namespace Orchard.Data.Providers { + public class DataServiceParameters { + public string Provider { get; set; } + public string DataFolder { get; set; } + public string ConnectionString { get; set; } + } +} \ No newline at end of file diff --git a/src/Orchard/Data/Providers/DataServicesProviderFactory.cs b/src/Orchard/Data/Providers/DataServicesProviderFactory.cs new file mode 100644 index 000000000..b01ba3c03 --- /dev/null +++ b/src/Orchard/Data/Providers/DataServicesProviderFactory.cs @@ -0,0 +1,35 @@ +using System; +using System.Collections.Generic; +using Autofac.Features.Metadata; + +namespace Orchard.Data.Providers { + + public delegate IDataServicesProvider CreateDataServicesProvider(string dataFolder, string connectionString); + + public class DataServicesProviderFactory : IDataServicesProviderFactory { + private readonly IEnumerable> _providers; + + public DataServicesProviderFactory(IEnumerable> providers) { + _providers = providers; + } + + public IDataServicesProvider CreateProvider(DataServiceParameters parameters) { + var factory = GetProviderFactory(parameters.Provider) ?? GetProviderFactory("SqlServer"); + + return factory != null ? factory(parameters.DataFolder, parameters.ConnectionString) : null; + } + + CreateDataServicesProvider GetProviderFactory(string providerName) { + foreach (var providerMeta in _providers) { + object name; + if (!providerMeta.Metadata.TryGetValue("ProviderName", out name)) { + continue; + } + if (string.Equals(Convert.ToString(name), providerName, StringComparison.OrdinalIgnoreCase)) { + return providerMeta.Value; + } + } + return null; + } + } +} diff --git a/src/Orchard/Data/Providers/IDataServicesProvider.cs b/src/Orchard/Data/Providers/IDataServicesProvider.cs new file mode 100644 index 000000000..2d66a4a87 --- /dev/null +++ b/src/Orchard/Data/Providers/IDataServicesProvider.cs @@ -0,0 +1,7 @@ +using NHibernate; + +namespace Orchard.Data.Providers { + public interface IDataServicesProvider : ITransientDependency { + ISessionFactory BuildSessionFactory(SessionFactoryParameters sessionFactoryParameters); + } +} diff --git a/src/Orchard/Data/Providers/IDataServicesProviderFactory.cs b/src/Orchard/Data/Providers/IDataServicesProviderFactory.cs new file mode 100644 index 000000000..8b47d40dd --- /dev/null +++ b/src/Orchard/Data/Providers/IDataServicesProviderFactory.cs @@ -0,0 +1,14 @@ +using NHibernate; + +namespace Orchard.Data.Providers { + public interface IDataServicesProviderFactory : IDependency { + IDataServicesProvider CreateProvider(DataServiceParameters sessionFactoryParameters); + } + + public static class IDataServicesProviderSelectorExtensions { + public static ISessionFactory BuildSessionFactory(this IDataServicesProviderFactory factory, SessionFactoryParameters sessionFactoryParameters) { + var provider = factory.CreateProvider(sessionFactoryParameters); + return provider != null ? provider.BuildSessionFactory(sessionFactoryParameters) : null; + } + } +} diff --git a/src/Orchard/Data/Builders/SQLiteBuilder.cs b/src/Orchard/Data/Providers/SQLiteDataServicesProvider.cs similarity index 75% rename from src/Orchard/Data/Builders/SQLiteBuilder.cs rename to src/Orchard/Data/Providers/SQLiteDataServicesProvider.cs index f1f9bc7eb..dbc619391 100644 --- a/src/Orchard/Data/Builders/SQLiteBuilder.cs +++ b/src/Orchard/Data/Providers/SQLiteDataServicesProvider.cs @@ -1,16 +1,20 @@ using System.IO; using FluentNHibernate.Cfg.Db; -namespace Orchard.Data.Builders { - public class SQLiteBuilder : AbstractBuilder { +namespace Orchard.Data.Providers { + public class SQLiteDataServicesProvider : AbstractDataServicesProvider { private readonly string _dataFolder; private readonly string _connectionString; - public SQLiteBuilder(string dataFolder, string connectionString) { + public SQLiteDataServicesProvider(string dataFolder, string connectionString) { _dataFolder = dataFolder; _connectionString = connectionString; } + public static string ProviderName { + get { return "SQLite"; } + } + protected override IPersistenceConfigurer GetPersistenceConfigurer(bool createDatabase) { var persistence = SQLiteConfiguration.Standard; if (string.IsNullOrEmpty(_connectionString)) { diff --git a/src/Orchard/Data/Providers/SessionFactoryParameters.cs b/src/Orchard/Data/Providers/SessionFactoryParameters.cs new file mode 100644 index 000000000..d7ca8855c --- /dev/null +++ b/src/Orchard/Data/Providers/SessionFactoryParameters.cs @@ -0,0 +1,10 @@ +using System.Collections.Generic; +using Orchard.Environment.ShellBuilders.Models; + +namespace Orchard.Data.Providers { + public class SessionFactoryParameters : DataServiceParameters { + public IEnumerable RecordDescriptors { get; set; } + public bool CreateDatabase { get; set; } + public bool UpdateSchema { get; set; } + } +} diff --git a/src/Orchard/Data/Builders/SqlServerBuilder.cs b/src/Orchard/Data/Providers/SqlServerDataServicesProvider.cs similarity index 67% rename from src/Orchard/Data/Builders/SqlServerBuilder.cs rename to src/Orchard/Data/Providers/SqlServerDataServicesProvider.cs index 7b51b24a0..34ee1e0a0 100644 --- a/src/Orchard/Data/Builders/SqlServerBuilder.cs +++ b/src/Orchard/Data/Providers/SqlServerDataServicesProvider.cs @@ -1,17 +1,21 @@ using System; using FluentNHibernate.Cfg.Db; -namespace Orchard.Data.Builders { - public class SqlServerBuilder : AbstractBuilder { +namespace Orchard.Data.Providers { + public class SqlServerDataServicesProvider : AbstractDataServicesProvider { private readonly string _dataFolder; private readonly string _connectionString; - public SqlServerBuilder(string dataFolder, string connectionString) { + public SqlServerDataServicesProvider(string dataFolder, string connectionString) { _dataFolder = dataFolder; _connectionString = connectionString; } + public static string ProviderName { + get { return "SqlServer"; } + } + protected override IPersistenceConfigurer GetPersistenceConfigurer(bool createDatabase) { var persistence = MsSqlConfiguration.MsSql2008; if (string.IsNullOrEmpty(_connectionString)) { diff --git a/src/Orchard/Data/SessionFactoryHolder.cs b/src/Orchard/Data/SessionFactoryHolder.cs index 6dcaa417b..aa5daeccb 100644 --- a/src/Orchard/Data/SessionFactoryHolder.cs +++ b/src/Orchard/Data/SessionFactoryHolder.cs @@ -1,7 +1,7 @@ using System; using System.IO; using NHibernate; -using Orchard.Data.Builders; +using Orchard.Data.Providers; using Orchard.Environment.Configuration; using Orchard.Environment.Descriptor; using Orchard.Environment.Descriptor.Models; @@ -20,7 +20,7 @@ namespace Orchard.Data { public class SessionFactoryHolder : ISessionFactoryHolder { private readonly ShellSettings _shellSettings; private readonly ShellBlueprint _shellBlueprint; - private readonly ISessionFactoryBuilder _sessionFactoryBuilder; + private readonly IDataServicesProviderFactory _dataServicesProviderFactory; private readonly IAppDataFolder _appDataFolder; private ISessionFactory _sessionFactory; @@ -28,11 +28,11 @@ namespace Orchard.Data { public SessionFactoryHolder( ShellSettings shellSettings, ShellBlueprint shellBlueprint, - ISessionFactoryBuilder sessionFactoryBuilder, + IDataServicesProviderFactory dataServicesProviderFactory, IAppDataFolder appDataFolder) { _shellSettings = shellSettings; _shellBlueprint = shellBlueprint; - _sessionFactoryBuilder = sessionFactoryBuilder; + _dataServicesProviderFactory = dataServicesProviderFactory; _appDataFolder = appDataFolder; T = NullLocalizer.Instance; @@ -81,7 +81,7 @@ namespace Orchard.Data { var shellFolder = _appDataFolder.MapPath(shellPath); - var sessionFactory = _sessionFactoryBuilder.BuildSessionFactory(new SessionFactoryParameters { + var sessionFactory = _dataServicesProviderFactory.BuildSessionFactory(new SessionFactoryParameters { Provider = _shellSettings.DataProvider, DataFolder = shellFolder, ConnectionString = _shellSettings.DataConnectionString, diff --git a/src/Orchard/Orchard.Framework.csproj b/src/Orchard/Orchard.Framework.csproj index 418cd1813..194d3ea19 100644 --- a/src/Orchard/Orchard.Framework.csproj +++ b/src/Orchard/Orchard.Framework.csproj @@ -388,6 +388,9 @@ + + + @@ -501,11 +504,11 @@ - - - - - + + + + +