diff --git a/templates/module/MyCompanyName.MyModuleName.sln b/templates/module/MyCompanyName.MyModuleName.sln index b87d975db8..9f696a6559 100644 --- a/templates/module/MyCompanyName.MyModuleName.sln +++ b/templates/module/MyCompanyName.MyModuleName.sln @@ -27,6 +27,16 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MyCompanyName.MyModuleName. EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MyCompanyName.MyModuleName.Web", "src\MyCompanyName.MyModuleName.Web\MyCompanyName.MyModuleName.Web.csproj", "{8C5B0D35-9734-4439-977C-2F1AC9E1D69E}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MyCompanyName.MyModuleName.TestBase", "test\MyCompanyName.MyModuleName.TestBase\MyCompanyName.MyModuleName.TestBase.csproj", "{6E5B22E7-E2DB-45D4-B828-8019D8FD51E8}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MyCompanyName.MyModuleName.Domain.Tests", "test\MyCompanyName.MyModuleName.Domain.Tests\MyCompanyName.MyModuleName.Domain.Tests.csproj", "{44FB6636-5427-415D-8883-CB7E42D548F2}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MyCompanyName.MyModuleName.EntityFrameworkCore.Tests", "test\MyCompanyName.MyModuleName.EntityFrameworkCore.Tests\MyCompanyName.MyModuleName.EntityFrameworkCore.Tests.csproj", "{E5906DE1-B2F5-472E-BE1B-1D96A68B834D}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MyCompanyName.MyModuleName.MongoDB.Tests", "test\MyCompanyName.MyModuleName.MongoDB.Tests\MyCompanyName.MyModuleName.MongoDB.Tests.csproj", "{AA783A34-86E4-41A5-AE21-5D9FBD98D858}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MyCompanyName.MyModuleName.Application.Tests", "test\MyCompanyName.MyModuleName.Application.Tests\MyCompanyName.MyModuleName.Application.Tests.csproj", "{13A9EAD6-F3A4-4357-BA4A-A7E8FEB4A264}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -69,6 +79,26 @@ Global {8C5B0D35-9734-4439-977C-2F1AC9E1D69E}.Debug|Any CPU.Build.0 = Debug|Any CPU {8C5B0D35-9734-4439-977C-2F1AC9E1D69E}.Release|Any CPU.ActiveCfg = Release|Any CPU {8C5B0D35-9734-4439-977C-2F1AC9E1D69E}.Release|Any CPU.Build.0 = Release|Any CPU + {6E5B22E7-E2DB-45D4-B828-8019D8FD51E8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6E5B22E7-E2DB-45D4-B828-8019D8FD51E8}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6E5B22E7-E2DB-45D4-B828-8019D8FD51E8}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6E5B22E7-E2DB-45D4-B828-8019D8FD51E8}.Release|Any CPU.Build.0 = Release|Any CPU + {44FB6636-5427-415D-8883-CB7E42D548F2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {44FB6636-5427-415D-8883-CB7E42D548F2}.Debug|Any CPU.Build.0 = Debug|Any CPU + {44FB6636-5427-415D-8883-CB7E42D548F2}.Release|Any CPU.ActiveCfg = Release|Any CPU + {44FB6636-5427-415D-8883-CB7E42D548F2}.Release|Any CPU.Build.0 = Release|Any CPU + {E5906DE1-B2F5-472E-BE1B-1D96A68B834D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E5906DE1-B2F5-472E-BE1B-1D96A68B834D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E5906DE1-B2F5-472E-BE1B-1D96A68B834D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E5906DE1-B2F5-472E-BE1B-1D96A68B834D}.Release|Any CPU.Build.0 = Release|Any CPU + {AA783A34-86E4-41A5-AE21-5D9FBD98D858}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {AA783A34-86E4-41A5-AE21-5D9FBD98D858}.Debug|Any CPU.Build.0 = Debug|Any CPU + {AA783A34-86E4-41A5-AE21-5D9FBD98D858}.Release|Any CPU.ActiveCfg = Release|Any CPU + {AA783A34-86E4-41A5-AE21-5D9FBD98D858}.Release|Any CPU.Build.0 = Release|Any CPU + {13A9EAD6-F3A4-4357-BA4A-A7E8FEB4A264}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {13A9EAD6-F3A4-4357-BA4A-A7E8FEB4A264}.Debug|Any CPU.Build.0 = Debug|Any CPU + {13A9EAD6-F3A4-4357-BA4A-A7E8FEB4A264}.Release|Any CPU.ActiveCfg = Release|Any CPU + {13A9EAD6-F3A4-4357-BA4A-A7E8FEB4A264}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -83,6 +113,11 @@ Global {077AA5F8-8B61-420C-A6B5-0150A66FDB34} = {649A3FFA-182F-4E56-9717-E6A9A2BEC545} {36E2735F-CEAB-44C8-A6D1-2CDAFF399751} = {649A3FFA-182F-4E56-9717-E6A9A2BEC545} {8C5B0D35-9734-4439-977C-2F1AC9E1D69E} = {649A3FFA-182F-4E56-9717-E6A9A2BEC545} + {6E5B22E7-E2DB-45D4-B828-8019D8FD51E8} = {CCD2960C-23CC-4AB4-B84D-60C7AAA52F4D} + {44FB6636-5427-415D-8883-CB7E42D548F2} = {CCD2960C-23CC-4AB4-B84D-60C7AAA52F4D} + {E5906DE1-B2F5-472E-BE1B-1D96A68B834D} = {CCD2960C-23CC-4AB4-B84D-60C7AAA52F4D} + {AA783A34-86E4-41A5-AE21-5D9FBD98D858} = {CCD2960C-23CC-4AB4-B84D-60C7AAA52F4D} + {13A9EAD6-F3A4-4357-BA4A-A7E8FEB4A264} = {CCD2960C-23CC-4AB4-B84D-60C7AAA52F4D} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {4324B3B4-B60B-4E3C-91D8-59576B4E26DD} diff --git a/templates/module/src/MyCompanyName.MyModuleName.Web/MyModuleNameWebModule.cs b/templates/module/src/MyCompanyName.MyModuleName.Web/MyModuleNameWebModule.cs index 494fad3f5a..14bb40b64a 100644 --- a/templates/module/src/MyCompanyName.MyModuleName.Web/MyModuleNameWebModule.cs +++ b/templates/module/src/MyCompanyName.MyModuleName.Web/MyModuleNameWebModule.cs @@ -45,7 +45,7 @@ namespace MyCompanyName.MyModuleName .AddBaseTypes( typeof(AbpValidationResource), typeof(AbpUiResource) - ).AddVirtualJson("/Localization/Resources/AbpIdentity"); + ).AddVirtualJson("/Localization/Resources/MyModuleName"); }); context.Services.Configure(options => diff --git a/templates/module/test/MyCompanyName.MyModuleName.Application.Tests/MyCompanyName.MyModuleName.Application.Tests.csproj b/templates/module/test/MyCompanyName.MyModuleName.Application.Tests/MyCompanyName.MyModuleName.Application.Tests.csproj new file mode 100644 index 0000000000..ef06341aba --- /dev/null +++ b/templates/module/test/MyCompanyName.MyModuleName.Application.Tests/MyCompanyName.MyModuleName.Application.Tests.csproj @@ -0,0 +1,19 @@ + + + + + + netcoreapp2.1 + + + + + + + + + + + + + diff --git a/templates/module/test/MyCompanyName.MyModuleName.Application.Tests/MyCompanyName/MyModuleName/MyModuleNameApplicationTestModule.cs b/templates/module/test/MyCompanyName.MyModuleName.Application.Tests/MyCompanyName/MyModuleName/MyModuleNameApplicationTestModule.cs new file mode 100644 index 0000000000..11900886a5 --- /dev/null +++ b/templates/module/test/MyCompanyName.MyModuleName.Application.Tests/MyCompanyName/MyModuleName/MyModuleNameApplicationTestModule.cs @@ -0,0 +1,17 @@ +using Microsoft.Extensions.DependencyInjection; +using Volo.Abp.Modularity; + +namespace MyCompanyName.MyModuleName +{ + [DependsOn( + typeof(MyModuleNameApplicationModule), + typeof(MyModuleNameDomainTestModule) + )] + public class MyModuleNameApplicationTestModule : AbpModule + { + public override void ConfigureServices(ServiceConfigurationContext context) + { + context.Services.AddAssemblyOf(); + } + } +} diff --git a/templates/module/test/MyCompanyName.MyModuleName.Domain.Tests/MyCompanyName.MyModuleName.Domain.Tests.csproj b/templates/module/test/MyCompanyName.MyModuleName.Domain.Tests/MyCompanyName.MyModuleName.Domain.Tests.csproj new file mode 100644 index 0000000000..52fa6f3a69 --- /dev/null +++ b/templates/module/test/MyCompanyName.MyModuleName.Domain.Tests/MyCompanyName.MyModuleName.Domain.Tests.csproj @@ -0,0 +1,18 @@ + + + + + + netcoreapp2.1 + + + + + + + + + + + + diff --git a/templates/module/test/MyCompanyName.MyModuleName.Domain.Tests/MyCompanyName/MyModuleName/MyModuleNameDomainTestBase.cs b/templates/module/test/MyCompanyName.MyModuleName.Domain.Tests/MyCompanyName/MyModuleName/MyModuleNameDomainTestBase.cs new file mode 100644 index 0000000000..2723fa3c3a --- /dev/null +++ b/templates/module/test/MyCompanyName.MyModuleName.Domain.Tests/MyCompanyName/MyModuleName/MyModuleNameDomainTestBase.cs @@ -0,0 +1,7 @@ +namespace MyCompanyName.MyModuleName +{ + public abstract class MyModuleNameDomainTestBase : MyModuleNameTestBase + { + + } +} \ No newline at end of file diff --git a/templates/module/test/MyCompanyName.MyModuleName.Domain.Tests/MyCompanyName/MyModuleName/MyModuleNameDomainTestModule.cs b/templates/module/test/MyCompanyName.MyModuleName.Domain.Tests/MyCompanyName/MyModuleName/MyModuleNameDomainTestModule.cs new file mode 100644 index 0000000000..c18e8f3edb --- /dev/null +++ b/templates/module/test/MyCompanyName.MyModuleName.Domain.Tests/MyCompanyName/MyModuleName/MyModuleNameDomainTestModule.cs @@ -0,0 +1,17 @@ +using Microsoft.Extensions.DependencyInjection; +using MyCompanyName.MyModuleName.EntityFrameworkCore; +using Volo.Abp.Modularity; + +namespace MyCompanyName.MyModuleName +{ + [DependsOn( + typeof(MyModuleNameEntityFrameworkCoreTestModule) + )] + public class MyModuleNameDomainTestModule : AbpModule + { + public override void ConfigureServices(ServiceConfigurationContext context) + { + context.Services.AddAssemblyOf(); + } + } +} diff --git a/templates/module/test/MyCompanyName.MyModuleName.EntityFrameworkCore.Tests/MyCompanyName.MyModuleName.EntityFrameworkCore.Tests.csproj b/templates/module/test/MyCompanyName.MyModuleName.EntityFrameworkCore.Tests/MyCompanyName.MyModuleName.EntityFrameworkCore.Tests.csproj new file mode 100644 index 0000000000..cbd13175e1 --- /dev/null +++ b/templates/module/test/MyCompanyName.MyModuleName.EntityFrameworkCore.Tests/MyCompanyName.MyModuleName.EntityFrameworkCore.Tests.csproj @@ -0,0 +1,22 @@ + + + + + + netcoreapp2.1 + + + + + + + + + + + + + + + + diff --git a/templates/module/test/MyCompanyName.MyModuleName.EntityFrameworkCore.Tests/MyCompanyName/MyModuleName/EntityFrameworkCore/MyEntityRepository_Tests.cs b/templates/module/test/MyCompanyName.MyModuleName.EntityFrameworkCore.Tests/MyCompanyName/MyModuleName/EntityFrameworkCore/MyEntityRepository_Tests.cs new file mode 100644 index 0000000000..7125c71835 --- /dev/null +++ b/templates/module/test/MyCompanyName.MyModuleName.EntityFrameworkCore.Tests/MyCompanyName/MyModuleName/EntityFrameworkCore/MyEntityRepository_Tests.cs @@ -0,0 +1,7 @@ +namespace MyCompanyName.MyModuleName.EntityFrameworkCore +{ + public class MyEntityRepository_Tests : MyEntityRepository_Tests + { + + } +} diff --git a/templates/module/test/MyCompanyName.MyModuleName.EntityFrameworkCore.Tests/MyCompanyName/MyModuleName/EntityFrameworkCore/MyModuleNameEntityFrameworkCoreTestModule.cs b/templates/module/test/MyCompanyName.MyModuleName.EntityFrameworkCore.Tests/MyCompanyName/MyModuleName/EntityFrameworkCore/MyModuleNameEntityFrameworkCoreTestModule.cs new file mode 100644 index 0000000000..237ce6ab6d --- /dev/null +++ b/templates/module/test/MyCompanyName.MyModuleName.EntityFrameworkCore.Tests/MyCompanyName/MyModuleName/EntityFrameworkCore/MyModuleNameEntityFrameworkCoreTestModule.cs @@ -0,0 +1,44 @@ +using Microsoft.Data.Sqlite; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Storage; +using Microsoft.Extensions.DependencyInjection; +using Volo.Abp.EntityFrameworkCore; +using Volo.Abp.Modularity; + +namespace MyCompanyName.MyModuleName.EntityFrameworkCore +{ + [DependsOn( + typeof(MyModuleNameTestBaseModule), + typeof(MyModuleNameEntityFrameworkCoreModule) + )] + public class MyModuleNameEntityFrameworkCoreTestModule : AbpModule + { + public override void ConfigureServices(ServiceConfigurationContext context) + { + var sqliteConnection = CreateDatabaseAndGetConnection(); + + context.Services.Configure(options => + { + options.Configure(abpDbContextConfigurationContext => + { + abpDbContextConfigurationContext.DbContextOptions.UseSqlite(sqliteConnection); + }); + }); + + context.Services.AddAssemblyOf(); + } + + private static SqliteConnection CreateDatabaseAndGetConnection() + { + var connection = new SqliteConnection("Data Source=:memory:"); + connection.Open(); + + new MyModuleNameDbContext( + new DbContextOptionsBuilder().UseSqlite(connection).Options + ).GetService().CreateTables(); + + return connection; + } + } +} diff --git a/templates/module/test/MyCompanyName.MyModuleName.MongoDB.Tests/MyCompanyName.MyModuleName.MongoDB.Tests.csproj b/templates/module/test/MyCompanyName.MyModuleName.MongoDB.Tests/MyCompanyName.MyModuleName.MongoDB.Tests.csproj new file mode 100644 index 0000000000..a64641bf18 --- /dev/null +++ b/templates/module/test/MyCompanyName.MyModuleName.MongoDB.Tests/MyCompanyName.MyModuleName.MongoDB.Tests.csproj @@ -0,0 +1,20 @@ + + + + + + netcoreapp2.1 + + + + + + + + + + + + + + diff --git a/templates/module/test/MyCompanyName.MyModuleName.MongoDB.Tests/MyCompanyName/MyModuleName/MongoDB/MyEntityRepository_Tests.cs b/templates/module/test/MyCompanyName.MyModuleName.MongoDB.Tests/MyCompanyName/MyModuleName/MongoDB/MyEntityRepository_Tests.cs new file mode 100644 index 0000000000..c0d67c6b33 --- /dev/null +++ b/templates/module/test/MyCompanyName.MyModuleName.MongoDB.Tests/MyCompanyName/MyModuleName/MongoDB/MyEntityRepository_Tests.cs @@ -0,0 +1,7 @@ +namespace MyCompanyName.MyModuleName.MongoDB +{ + public class MyEntityRepository_Tests : MyEntityRepository_Tests + { + + } +} diff --git a/templates/module/test/MyCompanyName.MyModuleName.MongoDB.Tests/MyCompanyName/MyModuleName/MongoDB/MyModuleNameMongoDbTestModule.cs b/templates/module/test/MyCompanyName.MyModuleName.MongoDB.Tests/MyCompanyName/MyModuleName/MongoDB/MyModuleNameMongoDbTestModule.cs new file mode 100644 index 0000000000..5537d194f0 --- /dev/null +++ b/templates/module/test/MyCompanyName.MyModuleName.MongoDB.Tests/MyCompanyName/MyModuleName/MongoDB/MyModuleNameMongoDbTestModule.cs @@ -0,0 +1,34 @@ +using Microsoft.Extensions.DependencyInjection; +using Mongo2Go; +using Volo.Abp; +using Volo.Abp.Data; +using Volo.Abp.Modularity; + +namespace MyCompanyName.MyModuleName.MongoDB +{ + [DependsOn( + typeof(MyModuleNameTestBaseModule), + typeof(MyModuleNameMongoDbModule) + )] + public class MyModuleNameMongoDbTestModule : AbpModule + { + private MongoDbRunner _mongoDbRunner; + + public override void ConfigureServices(ServiceConfigurationContext context) + { + _mongoDbRunner = MongoDbRunner.Start(); + + context.Services.Configure(options => + { + options.ConnectionStrings.Default = _mongoDbRunner.ConnectionString; + }); + + context.Services.AddAssemblyOf(); + } + + public override void OnApplicationShutdown(ApplicationShutdownContext context) + { + _mongoDbRunner.Dispose(); + } + } +} \ No newline at end of file diff --git a/templates/module/test/MyCompanyName.MyModuleName.TestBase/MyCompanyName.MyModuleName.TestBase.csproj b/templates/module/test/MyCompanyName.MyModuleName.TestBase/MyCompanyName.MyModuleName.TestBase.csproj new file mode 100644 index 0000000000..6da1d1476a --- /dev/null +++ b/templates/module/test/MyCompanyName.MyModuleName.TestBase/MyCompanyName.MyModuleName.TestBase.csproj @@ -0,0 +1,26 @@ + + + + + + netcoreapp2.1 + + + + + + + + + + + + + + + + + + + + diff --git a/templates/module/test/MyCompanyName.MyModuleName.TestBase/MyCompanyName/MyModuleName/MyEntityRepository_Tests.cs b/templates/module/test/MyCompanyName.MyModuleName.TestBase/MyCompanyName/MyModuleName/MyEntityRepository_Tests.cs new file mode 100644 index 0000000000..7ea644b841 --- /dev/null +++ b/templates/module/test/MyCompanyName.MyModuleName.TestBase/MyCompanyName/MyModuleName/MyEntityRepository_Tests.cs @@ -0,0 +1,16 @@ +using System.Threading.Tasks; +using Volo.Abp.Modularity; +using Xunit; + +namespace MyCompanyName.MyModuleName +{ + public abstract class MyEntityRepository_Tests : MyModuleNameTestBase + where TStartupModule : IAbpModule + { + [Fact] + public async Task Test1() + { + + } + } +} diff --git a/templates/module/test/MyCompanyName.MyModuleName.TestBase/MyCompanyName/MyModuleName/MyModuleNameTestBase.cs b/templates/module/test/MyCompanyName.MyModuleName.TestBase/MyCompanyName/MyModuleName/MyModuleNameTestBase.cs new file mode 100644 index 0000000000..e13b6a0328 --- /dev/null +++ b/templates/module/test/MyCompanyName.MyModuleName.TestBase/MyCompanyName/MyModuleName/MyModuleNameTestBase.cs @@ -0,0 +1,14 @@ +using Volo.Abp; +using Volo.Abp.Modularity; + +namespace MyCompanyName.MyModuleName +{ + public abstract class MyModuleNameTestBase : AbpIntegratedTest + where TStartupModule : IAbpModule + { + protected override void SetAbpApplicationCreationOptions(AbpApplicationCreationOptions options) + { + options.UseAutofac(); + } + } +} diff --git a/templates/module/test/MyCompanyName.MyModuleName.TestBase/MyCompanyName/MyModuleName/MyModuleNameTestBaseModule.cs b/templates/module/test/MyCompanyName.MyModuleName.TestBase/MyCompanyName/MyModuleName/MyModuleNameTestBaseModule.cs new file mode 100644 index 0000000000..ddf859b6a2 --- /dev/null +++ b/templates/module/test/MyCompanyName.MyModuleName.TestBase/MyCompanyName/MyModuleName/MyModuleNameTestBaseModule.cs @@ -0,0 +1,39 @@ +using Microsoft.Extensions.DependencyInjection; +using Volo.Abp; +using Volo.Abp.Authorization; +using Volo.Abp.Autofac; +using Volo.Abp.Modularity; + +namespace MyCompanyName.MyModuleName +{ + [DependsOn( + typeof(AbpAutofacModule), + typeof(AbpTestBaseModule), + typeof(AbpAuthorizationModule), + typeof(MyModuleNameDomainModule) + )] + public class MyModuleNameTestBaseModule : AbpModule + { + public override void ConfigureServices(ServiceConfigurationContext context) + { + context.Services.AddAlwaysAllowPermissionChecker(); + + context.Services.AddAssemblyOf(); + } + + public override void OnApplicationInitialization(ApplicationInitializationContext context) + { + SeedTestData(context); + } + + private static void SeedTestData(ApplicationInitializationContext context) + { + using (var scope = context.ServiceProvider.CreateScope()) + { + scope.ServiceProvider + .GetRequiredService() + .Build(); + } + } + } +} diff --git a/templates/module/test/MyCompanyName.MyModuleName.TestBase/MyCompanyName/MyModuleName/MyModuleNameTestData.cs b/templates/module/test/MyCompanyName.MyModuleName.TestBase/MyCompanyName/MyModuleName/MyModuleNameTestData.cs new file mode 100644 index 0000000000..2f36e2c1ff --- /dev/null +++ b/templates/module/test/MyCompanyName.MyModuleName.TestBase/MyCompanyName/MyModuleName/MyModuleNameTestData.cs @@ -0,0 +1,8 @@ +using Volo.Abp.DependencyInjection; + +namespace MyCompanyName.MyModuleName +{ + public class MyModuleNameTestData : ISingletonDependency + { + } +} diff --git a/templates/module/test/MyCompanyName.MyModuleName.TestBase/MyCompanyName/MyModuleName/MyModuleNameTestDataBuilder.cs b/templates/module/test/MyCompanyName.MyModuleName.TestBase/MyCompanyName/MyModuleName/MyModuleNameTestDataBuilder.cs new file mode 100644 index 0000000000..a6914ce35c --- /dev/null +++ b/templates/module/test/MyCompanyName.MyModuleName.TestBase/MyCompanyName/MyModuleName/MyModuleNameTestDataBuilder.cs @@ -0,0 +1,24 @@ +using Volo.Abp.DependencyInjection; +using Volo.Abp.Guids; + +namespace MyCompanyName.MyModuleName +{ + public class MyModuleNameTestDataBuilder : ITransientDependency + { + private readonly IGuidGenerator _guidGenerator; + private MyModuleNameTestData _testData; + + public MyModuleNameTestDataBuilder( + IGuidGenerator guidGenerator, + MyModuleNameTestData testData) + { + _guidGenerator = guidGenerator; + _testData = testData; + } + + public void Build() + { + + } + } +} \ No newline at end of file