@@ -53,12 +53,12 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "build", "build", "{10C0818D | |||||
build\version.props = build\version.props | build\version.props = build\version.props | ||||
EndProjectSection | EndProjectSection | ||||
EndProject | EndProject | ||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DotNetCore.CAP.EntityFrameworkCore.Test", "test\DotNetCore.CAP.EntityFrameworkCore.Test\DotNetCore.CAP.EntityFrameworkCore.Test.csproj", "{69370370-9873-4D6A-965D-D1E16694047D}" | |||||
EndProject | |||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DotNetCore.CAP.Test", "test\DotNetCore.CAP.Test\DotNetCore.CAP.Test.csproj", "{F608B509-A99B-4AC7-8227-42051DD4A578}" | Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DotNetCore.CAP.Test", "test\DotNetCore.CAP.Test\DotNetCore.CAP.Test.csproj", "{F608B509-A99B-4AC7-8227-42051DD4A578}" | ||||
EndProject | EndProject | ||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DotNetCore.CAP.SqlServer", "src\DotNetCore.CAP.SqlServer\DotNetCore.CAP.SqlServer.csproj", "{3B577468-6792-4EF1-9237-15180B176A24}" | Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DotNetCore.CAP.SqlServer", "src\DotNetCore.CAP.SqlServer\DotNetCore.CAP.SqlServer.csproj", "{3B577468-6792-4EF1-9237-15180B176A24}" | ||||
EndProject | EndProject | ||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DotNetCore.CAP.SqlServer.Test", "test\DotNetCore.CAP.SqlServer.Test\DotNetCore.CAP.SqlServer.Test.csproj", "{DA00FA38-C4B9-4F55-8756-D480FBC1084F}" | |||||
EndProject | |||||
Global | Global | ||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution | GlobalSection(SolutionConfigurationPlatforms) = preSolution | ||||
Debug|Any CPU = Debug|Any CPU | Debug|Any CPU = Debug|Any CPU | ||||
@@ -81,10 +81,6 @@ Global | |||||
{9961B80E-0718-4280-B2A0-271B003DE26B}.Debug|Any CPU.Build.0 = Debug|Any CPU | {9961B80E-0718-4280-B2A0-271B003DE26B}.Debug|Any CPU.Build.0 = Debug|Any CPU | ||||
{9961B80E-0718-4280-B2A0-271B003DE26B}.Release|Any CPU.ActiveCfg = Release|Any CPU | {9961B80E-0718-4280-B2A0-271B003DE26B}.Release|Any CPU.ActiveCfg = Release|Any CPU | ||||
{9961B80E-0718-4280-B2A0-271B003DE26B}.Release|Any CPU.Build.0 = Release|Any CPU | {9961B80E-0718-4280-B2A0-271B003DE26B}.Release|Any CPU.Build.0 = Release|Any CPU | ||||
{69370370-9873-4D6A-965D-D1E16694047D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU | |||||
{69370370-9873-4D6A-965D-D1E16694047D}.Debug|Any CPU.Build.0 = Debug|Any CPU | |||||
{69370370-9873-4D6A-965D-D1E16694047D}.Release|Any CPU.ActiveCfg = Release|Any CPU | |||||
{69370370-9873-4D6A-965D-D1E16694047D}.Release|Any CPU.Build.0 = Release|Any CPU | |||||
{F608B509-A99B-4AC7-8227-42051DD4A578}.Debug|Any CPU.ActiveCfg = Debug|Any CPU | {F608B509-A99B-4AC7-8227-42051DD4A578}.Debug|Any CPU.ActiveCfg = Debug|Any CPU | ||||
{F608B509-A99B-4AC7-8227-42051DD4A578}.Debug|Any CPU.Build.0 = Debug|Any CPU | {F608B509-A99B-4AC7-8227-42051DD4A578}.Debug|Any CPU.Build.0 = Debug|Any CPU | ||||
{F608B509-A99B-4AC7-8227-42051DD4A578}.Release|Any CPU.ActiveCfg = Release|Any CPU | {F608B509-A99B-4AC7-8227-42051DD4A578}.Release|Any CPU.ActiveCfg = Release|Any CPU | ||||
@@ -92,6 +88,10 @@ Global | |||||
{3B577468-6792-4EF1-9237-15180B176A24}.Debug|Any CPU.Build.0 = Debug|Any CPU | {3B577468-6792-4EF1-9237-15180B176A24}.Debug|Any CPU.Build.0 = Debug|Any CPU | ||||
{3B577468-6792-4EF1-9237-15180B176A24}.Release|Any CPU.ActiveCfg = Release|Any CPU | {3B577468-6792-4EF1-9237-15180B176A24}.Release|Any CPU.ActiveCfg = Release|Any CPU | ||||
{3B577468-6792-4EF1-9237-15180B176A24}.Release|Any CPU.Build.0 = Release|Any CPU | {3B577468-6792-4EF1-9237-15180B176A24}.Release|Any CPU.Build.0 = Release|Any CPU | ||||
{DA00FA38-C4B9-4F55-8756-D480FBC1084F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU | |||||
{DA00FA38-C4B9-4F55-8756-D480FBC1084F}.Debug|Any CPU.Build.0 = Debug|Any CPU | |||||
{DA00FA38-C4B9-4F55-8756-D480FBC1084F}.Release|Any CPU.ActiveCfg = Release|Any CPU | |||||
{DA00FA38-C4B9-4F55-8756-D480FBC1084F}.Release|Any CPU.Build.0 = Release|Any CPU | |||||
EndGlobalSection | EndGlobalSection | ||||
GlobalSection(SolutionProperties) = preSolution | GlobalSection(SolutionProperties) = preSolution | ||||
HideSolutionNode = FALSE | HideSolutionNode = FALSE | ||||
@@ -102,8 +102,8 @@ Global | |||||
{2F095ED9-5BC9-4512-9013-A47685FB2508} = {3A6B6931-A123-477A-9469-8B468B5385AF} | {2F095ED9-5BC9-4512-9013-A47685FB2508} = {3A6B6931-A123-477A-9469-8B468B5385AF} | ||||
{C42CDE33-0878-4BA0-96F2-4CB7C8FDEAAD} = {9B2AE124-6636-4DE9-83A3-70360DABD0C4} | {C42CDE33-0878-4BA0-96F2-4CB7C8FDEAAD} = {9B2AE124-6636-4DE9-83A3-70360DABD0C4} | ||||
{9961B80E-0718-4280-B2A0-271B003DE26B} = {9B2AE124-6636-4DE9-83A3-70360DABD0C4} | {9961B80E-0718-4280-B2A0-271B003DE26B} = {9B2AE124-6636-4DE9-83A3-70360DABD0C4} | ||||
{69370370-9873-4D6A-965D-D1E16694047D} = {C09CDAB0-6DD4-46E9-B7F3-3EF2A4741EA0} | |||||
{F608B509-A99B-4AC7-8227-42051DD4A578} = {C09CDAB0-6DD4-46E9-B7F3-3EF2A4741EA0} | {F608B509-A99B-4AC7-8227-42051DD4A578} = {C09CDAB0-6DD4-46E9-B7F3-3EF2A4741EA0} | ||||
{3B577468-6792-4EF1-9237-15180B176A24} = {9B2AE124-6636-4DE9-83A3-70360DABD0C4} | {3B577468-6792-4EF1-9237-15180B176A24} = {9B2AE124-6636-4DE9-83A3-70360DABD0C4} | ||||
{DA00FA38-C4B9-4F55-8756-D480FBC1084F} = {C09CDAB0-6DD4-46E9-B7F3-3EF2A4741EA0} | |||||
EndGlobalSection | EndGlobalSection | ||||
EndGlobal | EndGlobal |
@@ -0,0 +1,11 @@ | |||||
using System; | |||||
using System.Collections.Generic; | |||||
using System.Text; | |||||
using Xunit; | |||||
namespace DotNetCore.CAP.EntityFrameworkCore.Test | |||||
{ | |||||
public class CapMessageStoreTest | |||||
{ | |||||
} | |||||
} |
@@ -0,0 +1,47 @@ | |||||
using System; | |||||
using System.Data.SqlClient; | |||||
namespace DotNetCore.CAP.EntityFrameworkCore.Test | |||||
{ | |||||
public static class ConnectionUtil | |||||
{ | |||||
private const string DatabaseVariable = "Cap_SqlServer_DatabaseName"; | |||||
private const string ConnectionStringTemplateVariable = "Cap_SqlServer_ConnectionStringTemplate"; | |||||
private const string MasterDatabaseName = "master"; | |||||
private const string DefaultDatabaseName = @"DotNetCore.CAP.EntityFrameworkCore.Test"; | |||||
private const string DefaultConnectionStringTemplate = | |||||
@"Server=192.168.2.206;Initial Catalog={0};User Id=sa;Password=123123;MultipleActiveResultSets=True"; | |||||
public static string GetDatabaseName() | |||||
{ | |||||
return Environment.GetEnvironmentVariable(DatabaseVariable) ?? DefaultDatabaseName; | |||||
} | |||||
public static string GetMasterConnectionString() | |||||
{ | |||||
return string.Format(GetConnectionStringTemplate(), MasterDatabaseName); | |||||
} | |||||
public static string GetConnectionString() | |||||
{ | |||||
return string.Format(GetConnectionStringTemplate(), GetDatabaseName()); | |||||
} | |||||
private static string GetConnectionStringTemplate() | |||||
{ | |||||
return | |||||
Environment.GetEnvironmentVariable(ConnectionStringTemplateVariable) ?? | |||||
DefaultConnectionStringTemplate; | |||||
} | |||||
public static SqlConnection CreateConnection(string connectionString = null) | |||||
{ | |||||
connectionString = connectionString ?? GetConnectionString(); | |||||
var connection = new SqlConnection(connectionString); | |||||
connection.Open(); | |||||
return connection; | |||||
} | |||||
} | |||||
} |
@@ -0,0 +1,62 @@ | |||||
using System.Data; | |||||
using System.Threading.Tasks; | |||||
using Dapper; | |||||
using Microsoft.EntityFrameworkCore; | |||||
namespace DotNetCore.CAP.EntityFrameworkCore.Test | |||||
{ | |||||
//public abstract class DatabaseTestHost : TestHost | |||||
//{ | |||||
// private static bool _sqlObjectInstalled; | |||||
// protected override void PostBuildServices() | |||||
// { | |||||
// base.PostBuildServices(); | |||||
// InitializeDatabase(); | |||||
// } | |||||
// public override void Dispose() | |||||
// { | |||||
// DeleteAllData(); | |||||
// base.Dispose(); | |||||
// } | |||||
// private void InitializeDatabase() | |||||
// { | |||||
// if (!_sqlObjectInstalled) | |||||
// { | |||||
// using (CreateScope()) | |||||
// { | |||||
// var context = GetService<TestDbContext>(); | |||||
// context.Database.EnsureDeleted(); | |||||
// context.Database.Migrate(); | |||||
// _sqlObjectInstalled = true; | |||||
// } | |||||
// } | |||||
// } | |||||
// private void DeleteAllData() | |||||
// { | |||||
// using (CreateScope()) | |||||
// { | |||||
// var context = GetService<TestDbContext>(); | |||||
// var commands = new[] | |||||
// { | |||||
// "DISABLE TRIGGER ALL ON ?", | |||||
// "ALTER TABLE ? NOCHECK CONSTRAINT ALL", | |||||
// "DELETE FROM ?", | |||||
// "ALTER TABLE ? CHECK CONSTRAINT ALL", | |||||
// "ENABLE TRIGGER ALL ON ?" | |||||
// }; | |||||
// foreach (var command in commands) | |||||
// { | |||||
// context.Database.GetDbConnection().Execute( | |||||
// "sp_MSforeachtable", | |||||
// new {command1 = command}, | |||||
// commandType: CommandType.StoredProcedure); | |||||
// } | |||||
// } | |||||
// } | |||||
//} | |||||
} |
@@ -0,0 +1,48 @@ | |||||
<Project Sdk="Microsoft.NET.Sdk"> | |||||
<PropertyGroup> | |||||
<TargetFramework>netcoreapp1.1</TargetFramework> | |||||
<TreatWarningsAsErrors>true</TreatWarningsAsErrors> | |||||
<AssemblyName>DotNetCore.CAP.SqlServer.Test</AssemblyName> | |||||
<PackageId>DotNetCore.CAP.SqlServer.Test</PackageId> | |||||
<GenerateRuntimeConfigurationFiles>true</GenerateRuntimeConfigurationFiles> | |||||
<PackageTargetFallback>$(PackageTargetFallback);dnxcore50;portable-net451+win8</PackageTargetFallback> | |||||
<RuntimeFrameworkVersion>1.1.1</RuntimeFrameworkVersion> | |||||
<GenerateAssemblyConfigurationAttribute>false</GenerateAssemblyConfigurationAttribute> | |||||
<GenerateAssemblyCompanyAttribute>false</GenerateAssemblyCompanyAttribute> | |||||
<GenerateAssemblyProductAttribute>false</GenerateAssemblyProductAttribute> | |||||
</PropertyGroup> | |||||
<ItemGroup> | |||||
<Compile Include="..\Shared\*.cs" Exclude="bin\**;obj\**;**\*.xproj;packages\**" /> | |||||
</ItemGroup> | |||||
<ItemGroup> | |||||
<ProjectReference Include="..\..\src\DotNetCore.CAP.SqlServer\DotNetCore.CAP.SqlServer.csproj" /> | |||||
<ProjectReference Include="..\..\src\DotNetCore.CAP\DotNetCore.CAP.csproj" /> | |||||
</ItemGroup> | |||||
<ItemGroup> | |||||
<PackageReference Include="Dapper" Version="1.50.2" /> | |||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.0.0" /> | |||||
<PackageReference Include="xunit.runner.visualstudio" Version="2.2.0" /> | |||||
<PackageReference Include="xunit" Version="2.2.0" /> | |||||
<PackageReference Include="Microsoft.AspNetCore.Http" Version="1.1.2" /> | |||||
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="1.1.1" /> | |||||
<PackageReference Include="Moq" Version="4.7.63" /> | |||||
<PackageReference Include="Microsoft.Extensions.Logging" Version="1.1.2" /> | |||||
<PackageReference Include="Microsoft.Extensions.Configuration.Abstractions" Version="1.1.2" /> | |||||
<PackageReference Include="Microsoft.Extensions.Configuration" Version="1.1.2" /> | |||||
<PackageReference Include="Microsoft.Extensions.Configuration.FileExtensions" Version="1.1.2" /> | |||||
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="1.1.2" /> | |||||
<PackageReference Include="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="1.1.2" /> | |||||
<PackageReference Include="System.Data.SqlClient" Version="4.3.1" /> | |||||
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="1.1.2" /> | |||||
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="1.1.2" /> | |||||
</ItemGroup> | |||||
<ItemGroup> | |||||
<Service Include="{82a7f48d-3b50-4b1e-b82e-3ada8210c358}" /> | |||||
</ItemGroup> | |||||
</Project> |
@@ -0,0 +1,168 @@ | |||||
namespace DotNetCore.CAP.EntityFrameworkCore.Test | |||||
{ | |||||
//public class EFMessageStoreTest : DatabaseTestHost | |||||
//{ | |||||
// [Fact] | |||||
// public void CanCreateSentMessageUsingEF() | |||||
// { | |||||
// using (var db = CreateContext()) | |||||
// { | |||||
// var guid = Guid.NewGuid().ToString(); | |||||
// var message = new CapPublishedMessage | |||||
// { | |||||
// Id = guid, | |||||
// Content = "this is message body", | |||||
// StatusName = StatusName.Enqueued | |||||
// }; | |||||
// db.Attach(message).State = Microsoft.EntityFrameworkCore.EntityState.Added; | |||||
// db.SaveChanges(); | |||||
// Assert.True(db.CapSentMessages.Any(u => u.Id == guid)); | |||||
// Assert.NotNull(db.CapSentMessages.FirstOrDefault(u => u.StatusName == StatusName.Enqueued)); | |||||
// } | |||||
// } | |||||
// [Fact] | |||||
// public void CanUpdateSentMessageUsingEF() | |||||
// { | |||||
// using (var db = CreateContext()) | |||||
// { | |||||
// var guid = Guid.NewGuid().ToString(); | |||||
// var message = new CapPublishedMessage | |||||
// { | |||||
// Id = guid, | |||||
// Content = "this is message body", | |||||
// StatusName = StatusName.Enqueued | |||||
// }; | |||||
// db.Attach(message).State = Microsoft.EntityFrameworkCore.EntityState.Added; | |||||
// db.SaveChanges(); | |||||
// var selectedMessage = db.CapSentMessages.FirstOrDefault(u => u.StatusName == StatusName.Enqueued); | |||||
// Assert.NotNull(selectedMessage); | |||||
// selectedMessage.StatusName = StatusName.Succeeded; | |||||
// selectedMessage.Content = "Test"; | |||||
// db.SaveChanges(); | |||||
// selectedMessage = db.CapSentMessages.FirstOrDefault(u => u.StatusName == StatusName.Succeeded); | |||||
// Assert.NotNull(selectedMessage); | |||||
// Assert.True(selectedMessage.Content == "Test"); | |||||
// } | |||||
// } | |||||
// [Fact] | |||||
// public void CanRemoveSentMessageUsingEF() | |||||
// { | |||||
// using (var db = CreateContext()) | |||||
// { | |||||
// var guid = Guid.NewGuid().ToString(); | |||||
// var message = new CapPublishedMessage | |||||
// { | |||||
// Id = guid, | |||||
// Content = "this is message body", | |||||
// StatusName = StatusName.Enqueued | |||||
// }; | |||||
// db.Attach(message).State = Microsoft.EntityFrameworkCore.EntityState.Added; | |||||
// db.SaveChanges(); | |||||
// var selectedMessage = db.CapSentMessages.FirstOrDefault(u => u.StatusName == StatusName.Enqueued); | |||||
// Assert.NotNull(selectedMessage); | |||||
// db.CapSentMessages.Remove(selectedMessage); | |||||
// db.SaveChanges(); | |||||
// selectedMessage = db.CapSentMessages.FirstOrDefault(u => u.StatusName == StatusName.Enqueued); | |||||
// Assert.Null(selectedMessage); | |||||
// } | |||||
// } | |||||
// [Fact] | |||||
// public void CanCreateReceivedMessageUsingEF() | |||||
// { | |||||
// using (var db = CreateContext()) | |||||
// { | |||||
// var guid = Guid.NewGuid().ToString(); | |||||
// var message = new CapReceivedMessage | |||||
// { | |||||
// Id = guid, | |||||
// Content = "this is message body", | |||||
// StatusName = StatusName.Enqueued | |||||
// }; | |||||
// db.Attach(message).State = Microsoft.EntityFrameworkCore.EntityState.Added; | |||||
// db.SaveChanges(); | |||||
// Assert.True(db.CapReceivedMessages.Any(u => u.Id == guid)); | |||||
// Assert.NotNull(db.CapReceivedMessages.FirstOrDefault(u => u.StatusName == StatusName.Enqueued)); | |||||
// } | |||||
// } | |||||
// [Fact] | |||||
// public void CanUpdateReceivedMessageUsingEF() | |||||
// { | |||||
// using (var db = CreateContext()) | |||||
// { | |||||
// var guid = Guid.NewGuid().ToString(); | |||||
// var message = new CapReceivedMessage | |||||
// { | |||||
// Id = guid, | |||||
// Content = "this is message body", | |||||
// StatusName = StatusName.Enqueued | |||||
// }; | |||||
// db.Attach(message).State = Microsoft.EntityFrameworkCore.EntityState.Added; | |||||
// db.SaveChanges(); | |||||
// var selectedMessage = db.CapReceivedMessages.FirstOrDefault(u => u.StatusName == StatusName.Enqueued); | |||||
// Assert.NotNull(selectedMessage); | |||||
// selectedMessage.StatusName = StatusName.Succeeded; | |||||
// selectedMessage.Content = "Test"; | |||||
// db.SaveChanges(); | |||||
// selectedMessage = db.CapReceivedMessages.FirstOrDefault(u => u.StatusName == StatusName.Succeeded); | |||||
// Assert.NotNull(selectedMessage); | |||||
// Assert.True(selectedMessage.Content == "Test"); | |||||
// } | |||||
// } | |||||
// [Fact] | |||||
// public void CanRemoveReceivedMessageUsingEF() | |||||
// { | |||||
// using (var db = CreateContext()) | |||||
// { | |||||
// var guid = Guid.NewGuid().ToString(); | |||||
// var message = new CapReceivedMessage | |||||
// { | |||||
// Id = guid, | |||||
// Content = "this is message body", | |||||
// StatusName = StatusName.Enqueued | |||||
// }; | |||||
// db.Attach(message).State = Microsoft.EntityFrameworkCore.EntityState.Added; | |||||
// db.SaveChanges(); | |||||
// var selectedMessage = db.CapReceivedMessages.FirstOrDefault(u => u.StatusName == StatusName.Enqueued); | |||||
// Assert.NotNull(selectedMessage); | |||||
// db.CapReceivedMessages.Remove(selectedMessage); | |||||
// db.SaveChanges(); | |||||
// selectedMessage = db.CapReceivedMessages.FirstOrDefault(u => u.StatusName == StatusName.Enqueued); | |||||
// Assert.Null(selectedMessage); | |||||
// } | |||||
// } | |||||
// public TestDbContext CreateContext(bool delete = false) | |||||
// { | |||||
// var db = Provider.GetRequiredService<TestDbContext>(); | |||||
// if (delete) | |||||
// { | |||||
// db.Database.EnsureDeleted(); | |||||
// } | |||||
// db.Database.EnsureCreated(); | |||||
// return db; | |||||
// } | |||||
//} | |||||
} |
@@ -0,0 +1,18 @@ | |||||
using System.Reflection; | |||||
using System.Runtime.InteropServices; | |||||
// General Information about an assembly is controlled through the following | |||||
// set of attributes. Change these attribute values to modify the information | |||||
// associated with an assembly. | |||||
[assembly: AssemblyConfiguration("")] | |||||
[assembly: AssemblyCompany("")] | |||||
[assembly: AssemblyProduct("DotNetCore.CAP.EntityFrameworkCore.Test")] | |||||
[assembly: AssemblyTrademark("")] | |||||
// Setting ComVisible to false makes the types in this assembly not visible | |||||
// to COM components. If you need to access a type in this assembly from | |||||
// COM, set the ComVisible attribute to true on that type. | |||||
[assembly: ComVisible(false)] | |||||
// The following GUID is for the ID of the typelib if this project is exposed to COM | |||||
[assembly: Guid("7442c942-1ddc-40e4-8f1b-654e721eaa45")] |
@@ -0,0 +1,97 @@ | |||||
using System; | |||||
using Microsoft.EntityFrameworkCore; | |||||
using Microsoft.Extensions.DependencyInjection; | |||||
namespace DotNetCore.CAP.EntityFrameworkCore.Test | |||||
{ | |||||
public abstract class TestHost : IDisposable | |||||
{ | |||||
protected IServiceCollection _services; | |||||
private IServiceProvider _provider; | |||||
private IServiceProvider _scopedProvider; | |||||
public TestHost() | |||||
{ | |||||
CreateServiceCollection(); | |||||
PreBuildServices(); | |||||
BuildServices(); | |||||
PostBuildServices(); | |||||
} | |||||
protected IServiceProvider Provider => _scopedProvider ?? _provider; | |||||
private void CreateServiceCollection() | |||||
{ | |||||
var services = new ServiceCollection(); | |||||
services.AddOptions(); | |||||
services.AddLogging(); | |||||
var connectionString = ConnectionUtil.GetConnectionString(); | |||||
//services.AddSingleton(new SqlServerOptions { ConnectionString = connectionString }); | |||||
//services.AddDbContext<TestDbContext>(options => options.UseSqlServer(connectionString)); | |||||
_services = services; | |||||
} | |||||
protected virtual void PreBuildServices() | |||||
{ | |||||
} | |||||
private void BuildServices() | |||||
{ | |||||
_provider = _services.BuildServiceProvider(); | |||||
} | |||||
protected virtual void PostBuildServices() | |||||
{ | |||||
} | |||||
public IDisposable CreateScope() | |||||
{ | |||||
var scope = CreateScope(_provider); | |||||
var loc = scope.ServiceProvider; | |||||
_scopedProvider = loc; | |||||
return new DelegateDisposable(() => | |||||
{ | |||||
if (_scopedProvider == loc) | |||||
{ | |||||
_scopedProvider = null; | |||||
} | |||||
scope.Dispose(); | |||||
}); | |||||
} | |||||
public IServiceScope CreateScope(IServiceProvider provider) | |||||
{ | |||||
var scope = provider.GetService<IServiceScopeFactory>().CreateScope(); | |||||
return scope; | |||||
} | |||||
public T GetService<T>() => Provider.GetService<T>(); | |||||
public T Ensure<T>(ref T service) | |||||
where T : class | |||||
=> service ?? (service = GetService<T>()); | |||||
public virtual void Dispose() | |||||
{ | |||||
(_provider as IDisposable)?.Dispose(); | |||||
} | |||||
private class DelegateDisposable : IDisposable | |||||
{ | |||||
private Action _dispose; | |||||
public DelegateDisposable(Action dispose) | |||||
{ | |||||
_dispose = dispose; | |||||
} | |||||
public void Dispose() | |||||
{ | |||||
_dispose(); | |||||
} | |||||
} | |||||
} | |||||
} |
@@ -1,8 +1,5 @@ | |||||
using System; | using System; | ||||
using System.Threading; | |||||
using System.Threading.Tasks; | using System.Threading.Tasks; | ||||
using DotNetCore.CAP.Processor; | |||||
using DotNetCore.CAP.Models; | |||||
using Microsoft.Extensions.DependencyInjection; | using Microsoft.Extensions.DependencyInjection; | ||||
using Xunit; | using Xunit; | ||||
using System.Data; | using System.Data; | ||||
@@ -11,42 +8,42 @@ namespace DotNetCore.CAP.Test | |||||
{ | { | ||||
public class CapBuilderTest | public class CapBuilderTest | ||||
{ | { | ||||
//[Fact] | |||||
//public void CanOverrideMessageStore() | |||||
//{ | |||||
// var services = new ServiceCollection(); | |||||
// services.AddCap().AddMessageStore<MyMessageStore>(); | |||||
// var thingy = services.BuildServiceProvider() | |||||
// .GetRequiredService<ICapMessageStore>() as MyMessageStore; | |||||
// Assert.NotNull(thingy); | |||||
////} | |||||
[Fact] | |||||
public void CanCreateInstanceAndGetService() | |||||
{ | |||||
var services = new ServiceCollection(); | |||||
services.AddSingleton<ICapPublisher, MyProducerService>(); | |||||
var builder = new CapBuilder(services); | |||||
Assert.NotNull(builder); | |||||
//[Fact] | |||||
//public void CanOverrideJobs() | |||||
//{ | |||||
// var services = new ServiceCollection(); | |||||
// services.AddCap().AddJobs<MyJobTest>(); | |||||
var count = builder.Services.Count; | |||||
Assert.Equal(1, count); | |||||
} | |||||
// var thingy = services.BuildServiceProvider() | |||||
// .GetRequiredService<IJob>() as MyJobTest; | |||||
[Fact] | |||||
public void CanAddCapService() | |||||
{ | |||||
var services = new ServiceCollection(); | |||||
services.AddCap(x => { }); | |||||
var builder = services.BuildServiceProvider(); | |||||
// Assert.NotNull(thingy); | |||||
//} | |||||
var markService = builder.GetService<CapMarkerService>(); | |||||
Assert.NotNull(markService); | |||||
} | |||||
//[Fact] | |||||
//public void CanOverrideProducerService() | |||||
//{ | |||||
// var services = new ServiceCollection(); | |||||
// services.AddCap(x=> { }); | |||||
// var thingy = services.BuildServiceProvider() | |||||
// .GetRequiredService<ICapPublisher>() as MyProducerService; | |||||
[Fact] | |||||
public void CanOverridePublishService() | |||||
{ | |||||
var services = new ServiceCollection(); | |||||
services.AddCap(x => { }).AddProducerService<MyProducerService>(); | |||||
// Assert.NotNull(thingy); | |||||
//} | |||||
var thingy = services.BuildServiceProvider() | |||||
.GetRequiredService<ICapPublisher>() as MyProducerService; | |||||
Assert.NotNull(thingy); | |||||
} | |||||
private class MyProducerService : ICapPublisher | private class MyProducerService : ICapPublisher | ||||
{ | { | ||||
@@ -69,6 +66,6 @@ namespace DotNetCore.CAP.Test | |||||
{ | { | ||||
throw new NotImplementedException(); | throw new NotImplementedException(); | ||||
} | } | ||||
} | |||||
} | |||||
} | } | ||||
} | } |