Example #1
0
        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);
        }
Example #3
0
        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);
        }
Example #5
0
        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");
        }