public void GenerateCode(IConceptInfo conceptInfo, ICodeBuilder codeBuilder) { codeBuilder.InsertCodeToFile(GetModelSnippet(), $"{DomAssemblies.Model}\\QueryExtensions"); codeBuilder.InsertCodeToFile(GetOrmSnippet(), string.IsNullOrEmpty(_buildEnvironment.GeneratedSourceFolder) ? DomAssemblies.Orm.ToString() : "EntityFrameworkContext"); codeBuilder.InsertCodeToFile(GetRepositoriesSnippet(), DomAssemblies.Repositories.ToString()); codeBuilder.InsertCodeToFile(GetPersistenceStorageMapperSnippet(), string.IsNullOrEmpty(_buildEnvironment.GeneratedSourceFolder) ? DomAssemblies.Orm.ToString() : "PersistenceStorageMapper"); codeBuilder.InsertCode("this.Configuration.UseDatabaseNullSemantics = _rhetosAppOptions.EntityFrameworkUseDatabaseNullSemantics;\r\n ", EntityFrameworkContextInitializeTag); // Types used in the preceding code snippet: codeBuilder.AddReferencesFromDependency(typeof(Autofac.Module)); // Includes a reference to Autofac.dll. codeBuilder.AddReferencesFromDependency(typeof(Rhetos.Extensibility.INamedPlugins <>)); codeBuilder.AddReferencesFromDependency(typeof(Rhetos.Utilities.IUserInfo)); codeBuilder.AddReferencesFromDependency(typeof(Rhetos.Utilities.ISqlExecuter)); codeBuilder.AddReferencesFromDependency(typeof(Rhetos.Security.IAuthorizationManager)); codeBuilder.AddReferencesFromDependency(typeof(System.ComponentModel.Composition.ExportAttribute)); codeBuilder.AddReferencesFromDependency(typeof(Rhetos.Dom.DefaultConcepts.GenericRepositories)); codeBuilder.AddReferencesFromDependency(typeof(Rhetos.Dom.DefaultConcepts.IEntity)); codeBuilder.AddReferencesFromDependency(typeof(Rhetos.Logging.ILogProvider)); codeBuilder.AddReferencesFromDependency(typeof(Rhetos.Security.IWindowsSecurity)); codeBuilder.AddReferencesFromDependency(typeof(Rhetos.Utilities.SqlUtility)); codeBuilder.AddReferencesFromDependency(typeof(Rhetos.Utilities.ExceptionsUtility)); codeBuilder.AddReferencesFromDependency(typeof(System.Data.Entity.DbContext)); codeBuilder.AddReferencesFromDependency(typeof(System.Data.Entity.SqlServer.SqlProviderServices)); codeBuilder.AddReferencesFromDependency(typeof(System.Data.Entity.Core.EntityClient.EntityConnection)); codeBuilder.AddReferencesFromDependency(typeof(System.Data.Entity.Core.Metadata.Edm.MetadataWorkspace)); codeBuilder.AddReferencesFromDependency(typeof(System.Data.Entity.Core.Objects.ObjectStateEntry)); codeBuilder.AddReferencesFromDependency(typeof(Rhetos.Persistence.IPersistenceCache)); codeBuilder.AddReferencesFromDependency(typeof(Rhetos.Persistence.IPersistenceTransaction)); codeBuilder.AddReferencesFromDependency(typeof(Rhetos.Dom.DefaultConcepts.CommonConceptsDatabaseSettings)); codeBuilder.AddReferencesFromDependency(typeof(ApplyFiltersOnClientRead)); codeBuilder.AddReferencesFromDependency(typeof(ICommandInfo)); // Used from ApplyFiltersOnClientRead. }
public void GenerateCode(IConceptInfo conceptInfo, ICodeBuilder codeBuilder) { codeBuilder.InsertCodeToFile(GetModelSnippet(), Path.Combine(GeneratedSourceDirectories.Model.ToString(), "QueryExtensions")); codeBuilder.InsertCodeToFile(GetOrmSnippet(), "EntityFrameworkContext"); codeBuilder.InsertCodeToFile(GetRepositoriesSnippet(), GeneratedSourceDirectories.Repositories.ToString()); codeBuilder.InsertCodeToFile(GetPersistenceStorageMapperSnippet(), "PersistenceStorageMapper"); codeBuilder.InsertCode(GetInitialConfigurationSnippet(), InitialDomCodeGenerator.RhetosHostBuilderInitialConfigurationTag); codeBuilder.InsertCode("this.Configuration.UseDatabaseNullSemantics = _rhetosAppOptions.EntityFrameworkUseDatabaseNullSemantics;\r\n ", EntityFrameworkContextInitializeTag); }
public void GenerateCode(IConceptInfo conceptInfo, ICodeBuilder codeBuilder) { var info = (ModuleInfo)conceptInfo; codeBuilder.InsertCodeToFile( $@"namespace {info.Name} {{ {DomInitializationCodeGenerator.DisableWarnings(_commonConceptsOptions)}{DomInitializationCodeGenerator.StandardNamespacesSnippet} {UsingTag.Evaluate(info)} {NamespaceMembersTag.Evaluate(info)}{DomInitializationCodeGenerator.RestoreWarnings(_commonConceptsOptions)} }} namespace Common.Queryable {{ {DomInitializationCodeGenerator.DisableWarnings(_commonConceptsOptions)}{DomInitializationCodeGenerator.StandardNamespacesSnippet} {CommonQueryableMemebersTag.Evaluate(info)}{DomInitializationCodeGenerator.RestoreWarnings(_commonConceptsOptions)} }} ", $"{Path.Combine(GeneratedSourceDirectories.Model.ToString(), info.Name + GeneratedSourceDirectories.Model)}"); codeBuilder.InsertCodeToFile( $@"namespace {info.Name}._Helper {{ {DomInitializationCodeGenerator.DisableWarnings(_commonConceptsOptions)}{DomInitializationCodeGenerator.StandardNamespacesSnippet} {UsingTag.Evaluate(info)} public class _ModuleRepository {{ private readonly Rhetos.Extensibility.INamedPlugins<IRepository> _repositories; public _ModuleRepository(Rhetos.Extensibility.INamedPlugins<IRepository> repositories) {{ _repositories = repositories; }} {RepositoryMembersTag.Evaluate(info)} }} {HelperNamespaceMembersTag.Evaluate(info)}{DomInitializationCodeGenerator.RestoreWarnings(_commonConceptsOptions)} }} ", $"{Path.Combine(GeneratedSourceDirectories.Repositories.ToString(), info.Name + GeneratedSourceDirectories.Repositories)}"); codeBuilder.InsertCode(ModuleRepositoryInCommonRepositorySnippet(info), CommonDomRepositoryMembersTag); }
public void GenerateCode(IConceptInfo conceptInfo, ICodeBuilder codeBuilder) { var info = (ModuleInfo)conceptInfo; codeBuilder.InsertCodeToFile( $@"namespace {info.Name} {{ {DomInitializationCodeGenerator.DisableWarnings(_commonConceptsOptions)}{DomInitializationCodeGenerator.StandardNamespacesSnippet} {UsingTag.Evaluate(info)} {NamespaceMembersTag.Evaluate(info)}{DomInitializationCodeGenerator.RestoreWarnings(_commonConceptsOptions)} }} namespace Common.Queryable {{ {DomInitializationCodeGenerator.DisableWarnings(_commonConceptsOptions)}{DomInitializationCodeGenerator.StandardNamespacesSnippet} {CommonQueryableMemebersTag.Evaluate(info)}{DomInitializationCodeGenerator.RestoreWarnings(_commonConceptsOptions)} }} ", $"{DomAssemblies.Model}\\{info.Name}{DomAssemblies.Model}"); codeBuilder.InsertCodeToFile( $@"namespace {info.Name}._Helper {{ {DomInitializationCodeGenerator.DisableWarnings(_commonConceptsOptions)}{DomInitializationCodeGenerator.StandardNamespacesSnippet} {UsingTag.Evaluate(info)} public class _ModuleRepository {{ private readonly Rhetos.Extensibility.INamedPlugins<IRepository> _repositories; public _ModuleRepository(Rhetos.Extensibility.INamedPlugins<IRepository> repositories) {{ _repositories = repositories; }} {RepositoryMembersTag.Evaluate(info)} }} {HelperNamespaceMembersTag.Evaluate(info)}{DomInitializationCodeGenerator.RestoreWarnings(_commonConceptsOptions)} }} ", $"{DomAssemblies.Repositories}\\{info.Name}{DomAssemblies.Repositories}"); // Default .NET framework assemblies: codeBuilder.AddReferencesFromDependency(typeof(int)); // Includes reference to mscorlib.dll codeBuilder.AddReferencesFromDependency(typeof(Enumerable)); // Includes reference to System.Core, a default reference for new project in Visual Studio. codeBuilder.AddReferencesFromDependency(typeof(ISet <>)); // Includes reference to System, a default reference for new project in Visual Studio. codeBuilder.AddReferencesFromDependency(typeof(Microsoft.CSharp.RuntimeBinder.RuntimeBinderException)); // Includes reference to Microsoft.CSharp, a default reference for new project in Visual Studio. codeBuilder.AddReferencesFromDependency(typeof(System.Data.Common.DbDataReader)); // Includes reference to System.Data, a default reference for new project in Visual Studio. codeBuilder.AddReferencesFromDependency(typeof(System.Data.DataRowExtensions)); // Includes reference to System.Data.DataSetExtensions, a default reference for new project in Visual Studio. codeBuilder.AddReferencesFromDependency(typeof(System.Xml.Serialization.XmlSerializer)); // Includes reference to System.Xml, a default reference for new project in Visual Studio. codeBuilder.AddReferencesFromDependency(typeof(System.Xml.Linq.XElement)); // Includes reference to System.Xml.Linq, a default reference for new project in Visual Studio. // Commonly used Rhetos classes: codeBuilder.AddReferencesFromDependency(typeof(Rhetos.Dom.DefaultConcepts.FilterAll)); // Includes reference to Rhetos.Dom.DefaultConcepts.dll codeBuilder.AddReferencesFromDependency(typeof(Rhetos.Extensibility.INamedPlugins <>)); // Other classes used in domain object model: codeBuilder.AddReferencesFromDependency(typeof(System.Runtime.Serialization.DataContractAttribute)); // Includes reference to System.Runtime.Serialization.dll. codeBuilder.AddReferencesFromDependency(typeof(Rhetos.Persistence.IPersistenceTransaction)); codeBuilder.InsertCode(ModuleRepositoryInCommonRepositorySnippet(info), CommonDomRepositoryMembersTag); }
public void GenerateCode(IConceptInfo conceptInfo, ICodeBuilder codeBuilder) { var addPlugins = new StringBuilder(); foreach (var plugin in _plugins) { addPlugins.Append($"typeof({plugin.Type.FullName}),{Environment.NewLine} "); } var rhetosHostBuilderCode = $@"using Autofac; using Rhetos.Utilities; using System; using System.Collections.Generic; using System.Reflection; namespace Rhetos {{ public static class RhetosHostBuilderAppConfiguration {{ /// <summary> /// Configures <see cref=""IRhetosHostBuilder""/> with defaults for <i>{_rhetosBuildEnvironment.OutputAssemblyName}</i> Rhetos app. /// </summary> /// <remarks> /// The following defaults are applied: /// <list type=""bullet""> /// <item>Build-time configuration settings that are hard-coded in runtime environment: /// <see cref=""RhetosAppOptions.RhetosAppAssemblyName""/>, <see cref=""RhetosAppOptions.RhetosHostFolder""/> and <see cref=""DatabaseSettings""/></item>. /// <item>Registers plugin types from referenced libraries, and the current assembly for additional plugin discovery.</item> /// <item>Various plugin packages may add additional configuration settings and components registration.</item> /// </list> /// </remarks> public static IRhetosHostBuilder ConfigureRhetosAppDefaults(this IRhetosHostBuilder hostBuilder) {{ hostBuilder .ConfigureConfiguration(containerBuilder => containerBuilder .AddKeyValue( ConfigurationProvider.GetKey((RhetosAppOptions o) => o.RhetosAppAssemblyName), typeof(RhetosHostBuilderAppConfiguration).Assembly.GetName().Name) .AddKeyValue( ConfigurationProvider.GetKey((RhetosAppOptions o) => o.RhetosHostFolder), AppContext.BaseDirectory) .AddOptions(new Rhetos.Utilities.DatabaseSettings {{ DatabaseLanguage = {CsUtility.QuotedString(_databaseSettings.DatabaseLanguage)}, }}) ) .AddPluginAssemblies(GetPluginAssemblies()) .AddPluginTypes(GetPluginTypes()); {RhetosHostBuilderInitialConfigurationTag} return hostBuilder; }} private static IEnumerable<Assembly> GetPluginAssemblies() {{ return new Assembly[] {{ typeof(RhetosHostBuilderAppConfiguration).Assembly, {RhetosHostBuilderPluginAssembliesTag} }}; }} private static IEnumerable<Type> GetPluginTypes() {{ #pragma warning disable CS0618 // (Type or member is obsolete) Obsolete plugins can be registered without a warning, their usage will show a warning. return new Type[] {{ {addPlugins}{RhetosHostBuilderPluginTypesTag} }}; #pragma warning restore CS0618 }} }} }} "; codeBuilder.InsertCodeToFile(rhetosHostBuilderCode, "RhetosHostBuilderAppConfiguration"); }