Browse Source

集成Ocelot网关,Consul 服务注册和发现

pull/8/head
王军 4 years ago
parent
commit
18c058a00b
  1. 10
      Readme.md
  2. 24
      aspnet-core/modules/NotificationManagement/src/CompanyName.ProjectName.NotificationManagement.Application.Contracts/Notifications/ICommandNotificationAppService.cs
  3. 15
      aspnet-core/modules/NotificationManagement/src/CompanyName.ProjectName.NotificationManagement.Application.Contracts/Notifications/INotificationAppService.cs
  4. 12
      aspnet-core/modules/NotificationManagement/src/CompanyName.ProjectName.NotificationManagement.Application.Contracts/Samples/ISampleAppService.cs
  5. 7
      aspnet-core/modules/NotificationManagement/src/CompanyName.ProjectName.NotificationManagement.Application.Contracts/Samples/SampleDto.cs
  6. 30
      aspnet-core/modules/NotificationManagement/src/CompanyName.ProjectName.NotificationManagement.Application/Notifications/CommandNotificationAppService.cs
  7. 4
      aspnet-core/modules/NotificationManagement/src/CompanyName.ProjectName.NotificationManagement.Application/Notifications/DistributedEventHandlers/NotificationCreatedDistributedEventHandler.cs
  8. 12
      aspnet-core/modules/NotificationManagement/src/CompanyName.ProjectName.NotificationManagement.Application/Notifications/NotificationAppService.cs
  9. 29
      aspnet-core/modules/NotificationManagement/src/CompanyName.ProjectName.NotificationManagement.Application/Samples/SampleAppService.cs
  10. 56
      aspnet-core/modules/NotificationManagement/src/CompanyName.ProjectName.NotificationManagement.EntityFrameworkCore/EntityFrameworkCore/Notifications/DapperNotificationRepository.cs
  11. 10
      aspnet-core/modules/NotificationManagement/src/CompanyName.ProjectName.NotificationManagement.HttpApi/Notifications/NotificationController.cs
  12. 30
      aspnet-core/modules/NotificationManagement/test/CompanyName.ProjectName.NotificationManagement.Application.Tests/Samples/SampleAppService_Tests.cs
  13. 17
      aspnet-core/modules/NotificationManagement/test/CompanyName.ProjectName.NotificationManagement.Domain.Tests/Samples/SampleManager_Tests.cs
  14. 12
      aspnet-core/modules/NotificationManagement/test/CompanyName.ProjectName.NotificationManagement.EntityFrameworkCore.Tests/EntityFrameworkCore/Samples/SampleRepository_Tests.cs
  15. 22
      aspnet-core/modules/NotificationManagement/test/CompanyName.ProjectName.NotificationManagement.TestBase/Samples/SampleRepository_Tests.cs
  16. 4
      aspnet-core/services/host/CompanyName.ProjectName.HttpApi.Host/ProjectNameHttpApiHostModule.cs
  17. 7
      aspnet-core/services/host/CompanyName.ProjectName.IdentityServer/ProjectNameIdentityServerModule.cs
  18. 2
      aspnet-core/services/src/CompanyName.ProjectName.DbMigrator/appsettings.secrets.json
  19. 6
      aspnet-core/services/src/CompanyName.ProjectName.Domain/Data/Seeds/AbpSettingDataSeedContributor.cs
  20. 1
      aspnet-core/shared/CompanyName.ProjectName.Shared.Hosting.Microservices/CompanyName.ProjectName.Shared.Hosting.Microservices.csproj

10
Readme.md

@ -35,9 +35,13 @@
- [x] 用户管理
- [x] 角色管理
- [x] 审计日志
- [x] 后台任务(hangfire)
- [x] 集成事件(dotnetcore.cap)
- [x] IdentityServer4 - [x] 客户端管理 - [x] Api 资源管理 - [x] ApiScope 管理 - [x] Identity 资源管理
- [x] 后台任务
- [x] 集成事件
- [x] IdentityServer4
- [x] 客户端管理
- [x] Api 资源管理
- [x] ApiScope 管理
- [x] Identity 资源管理
- [x] SinglaR 消息通知
- [x] 多语言
- [x] FreeSql

24
aspnet-core/modules/NotificationManagement/src/CompanyName.ProjectName.NotificationManagement.Application.Contracts/Notifications/ICommandNotificationAppService.cs

@ -1,24 +0,0 @@
using System.Threading.Tasks;
using Volo.Abp.Application.Services;
using CompanyName.ProjectName.NotificationManagement.Notifications.Dtos;
namespace CompanyName.ProjectName.NotificationManagement.Notifications
{
public interface ICommandNotificationAppService : IApplicationService
{
/// <summary>
/// 消息设置为已读
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
Task SetReadAsync(SetReadInput input);
/// <summary>
/// 创建一个消息
/// 测试使用
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
Task CreateAsync(CreateNotificationInput input);
}
}

15
aspnet-core/modules/NotificationManagement/src/CompanyName.ProjectName.NotificationManagement.Application.Contracts/Notifications/INotificationAppService.cs

@ -12,5 +12,20 @@ namespace CompanyName.ProjectName.NotificationManagement.Notifications
/// </summary>
/// <returns></returns>
Task SendMessageAsync(string title, string content, MessageType messageType, List<string> users);
/// <summary>
/// 消息设置为已读
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
Task SetReadAsync(SetReadInput input);
/// <summary>
/// 创建一个消息
/// 测试使用
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
Task CreateAsync(CreateNotificationInput input);
}
}

12
aspnet-core/modules/NotificationManagement/src/CompanyName.ProjectName.NotificationManagement.Application.Contracts/Samples/ISampleAppService.cs

@ -1,12 +0,0 @@
using System.Threading.Tasks;
using Volo.Abp.Application.Services;
namespace CompanyName.ProjectName.NotificationManagement.Samples
{
public interface ISampleAppService : IApplicationService
{
Task<SampleDto> GetAsync();
Task<SampleDto> GetAuthorizedAsync();
}
}

7
aspnet-core/modules/NotificationManagement/src/CompanyName.ProjectName.NotificationManagement.Application.Contracts/Samples/SampleDto.cs

@ -1,7 +0,0 @@
namespace CompanyName.ProjectName.NotificationManagement.Samples
{
public class SampleDto
{
public int Value { get; set; }
}
}

30
aspnet-core/modules/NotificationManagement/src/CompanyName.ProjectName.NotificationManagement.Application/Notifications/CommandNotificationAppService.cs

@ -1,30 +0,0 @@
using System.Threading.Tasks;
using CompanyName.ProjectName.NotificationManagement.Notifications.Dtos;
using Volo.Abp.Users;
namespace CompanyName.ProjectName.NotificationManagement.Notifications
{
public class CommandNotificationAppService : NotificationManagementAppService, ICommandNotificationAppService
{
private readonly NotificationManager _notificationManager;
private readonly ICurrentUser _currentUser;
public CommandNotificationAppService(NotificationManager notificationManager, ICurrentUser currentUser)
{
_notificationManager = notificationManager;
_currentUser = currentUser;
}
public Task SetReadAsync(SetReadInput input)
{
return _notificationManager.SetReadAsync(input.Id, input.ReceiveId);
}
public async Task CreateAsync(CreateNotificationInput input)
{
if (_currentUser.Id != null)
await _notificationManager.CreateAsync(input.Title, input.Content, _currentUser.Id.Value, input.ReceiveIds,
input.MessageType);
}
}
}

4
aspnet-core/modules/NotificationManagement/src/CompanyName.ProjectName.NotificationManagement.Application/Notifications/DistributedEventHandlers/CreatedNotificationDistributedEventHandler.cs → aspnet-core/modules/NotificationManagement/src/CompanyName.ProjectName.NotificationManagement.Application/Notifications/DistributedEventHandlers/NotificationCreatedDistributedEventHandler.cs

@ -10,12 +10,12 @@ namespace CompanyName.ProjectName.NotificationManagement.Notifications.Distribut
/// 创建消息事件处理
/// </summary>
public class
CreatedNotificationDistributedEventHandler : IDistributedEventHandler<CreatedNotificationDistributedEvent>,
NotificationCreatedDistributedEventHandler : IDistributedEventHandler<CreatedNotificationDistributedEvent>,
ITransientDependency
{
private readonly INotificationAppService _hubAppService;
public CreatedNotificationDistributedEventHandler(INotificationAppService hubAppService)
public NotificationCreatedDistributedEventHandler(INotificationAppService hubAppService)
{
_hubAppService = hubAppService;
}

12
aspnet-core/modules/NotificationManagement/src/CompanyName.ProjectName.NotificationManagement.Application/Notifications/NotificationAppService.cs

@ -24,6 +24,18 @@ namespace CompanyName.ProjectName.NotificationManagement.Notifications
_currentUser = currentUser;
}
public Task SetReadAsync(SetReadInput input)
{
return _notificationManager.SetReadAsync(input.Id, input.ReceiveId);
}
public async Task CreateAsync(CreateNotificationInput input)
{
if (_currentUser.Id != null)
await _notificationManager.CreateAsync(input.Title, input.Content, _currentUser.Id.Value, input.ReceiveIds,
input.MessageType);
}
/// <summary>
/// 发送消息
/// </summary>

29
aspnet-core/modules/NotificationManagement/src/CompanyName.ProjectName.NotificationManagement.Application/Samples/SampleAppService.cs

@ -1,29 +0,0 @@
using System.Threading.Tasks;
using Microsoft.AspNetCore.Authorization;
namespace CompanyName.ProjectName.NotificationManagement.Samples
{
public class SampleAppService : NotificationManagementAppService, ISampleAppService
{
public Task<SampleDto> GetAsync()
{
return Task.FromResult(
new SampleDto
{
Value = 42
}
);
}
[Authorize]
public Task<SampleDto> GetAuthorizedAsync()
{
return Task.FromResult(
new SampleDto
{
Value = 42
}
);
}
}
}

56
aspnet-core/modules/NotificationManagement/src/CompanyName.ProjectName.NotificationManagement.EntityFrameworkCore/EntityFrameworkCore/Notifications/DapperNotificationRepository.cs

@ -11,10 +11,11 @@ using Volo.Abp.EntityFrameworkCore;
namespace CompanyName.ProjectName.NotificationManagement.EntityFrameworkCore.Notifications
{
public class DapperNotificationRepository : DapperRepository<INotificationManagementDbContext>,
public class DapperNotificationRepository : DapperRepository<INotificationManagementDbContext>,
IDapperNotificationRepository
{
public DapperNotificationRepository(IDbContextProvider<INotificationManagementDbContext> dbContextProvider) :
public DapperNotificationRepository(
IDbContextProvider<INotificationManagementDbContext> dbContextProvider) :
base(dbContextProvider)
{
}
@ -23,16 +24,18 @@ namespace CompanyName.ProjectName.NotificationManagement.EntityFrameworkCore.Not
/// 分页查询广播消息
/// </summary>
/// <returns></returns>
public async Task<List<PagingNotificationListOutput>> GetPageBroadCastNotificationByUserIdAsync(
Guid userId,
int maxResultCount = 10,
int skipCount = 0,
CancellationToken cancellationToken = default)
public async Task<List<PagingNotificationListOutput>>
GetPageBroadCastNotificationByUserIdAsync(
Guid userId,
int maxResultCount = 10,
int skipCount = 0,
CancellationToken cancellationToken = default)
{
var sql = BuildPageBroadCastSql();
sql += $" LIMIT {maxResultCount} OFFSET {skipCount}";
var tran = await GetDbTransactionAsync();
return (await (await GetDbConnectionAsync()).QueryAsync<PagingNotificationListOutput>(sql, new {userId},
return (await (await GetDbConnectionAsync()).QueryAsync<PagingNotificationListOutput>(
sql, new { userId },
transaction: tran))
.ToList();
}
@ -47,7 +50,8 @@ namespace CompanyName.ProjectName.NotificationManagement.EntityFrameworkCore.Not
{
var sql = BuildPageBroadCastCountSql();
var tran = await GetDbTransactionAsync();
return (await (await GetDbConnectionAsync()).QueryAsync<int>(sql, new {userId}, transaction: tran))
return (await (await GetDbConnectionAsync()).QueryAsync<int>(sql, new { userId },
transaction: tran))
.FirstOrDefault();
}
@ -64,7 +68,8 @@ namespace CompanyName.ProjectName.NotificationManagement.EntityFrameworkCore.Not
var sql = BuildPageTextSql();
sql += $" LIMIT {maxResultCount} OFFSET {skipCount}";
var tran = await GetDbTransactionAsync();
return (await (await GetDbConnectionAsync()).QueryAsync<PagingNotificationListOutput>(sql, new {userId},
return (await (await GetDbConnectionAsync()).QueryAsync<PagingNotificationListOutput>(
sql, new { userId },
transaction: tran))
.ToList();
}
@ -79,7 +84,8 @@ namespace CompanyName.ProjectName.NotificationManagement.EntityFrameworkCore.Not
{
var sql = BuildPageTextCountSql();
var tran = await GetDbTransactionAsync();
return (await (await GetDbConnectionAsync()).QueryAsync<int>(sql, new {userId}, transaction: tran))
return (await (await GetDbConnectionAsync()).QueryAsync<int>(sql, new { userId },
transaction: tran))
.FirstOrDefault();
}
@ -91,8 +97,8 @@ namespace CompanyName.ProjectName.NotificationManagement.EntityFrameworkCore.Not
+ "a.Content,"
+ "a.CreationTime, "
+ "b.Read "
+ "from Notification a "
+ "left join NotificationSubscription b on b.NotificationId=a.Id "
+ $"from {NotificationManagementDbProperties.DbTablePrefix}Notification a "
+ $"left join {NotificationManagementDbProperties.DbTablePrefix}NotificationSubscription b on b.NotificationId=a.Id "
+ "where a.IsDeleted=0 "
+ "and a.MessageType=20 "
+ "and b.ReceiveId=@userId "
@ -104,7 +110,7 @@ namespace CompanyName.ProjectName.NotificationManagement.EntityFrameworkCore.Not
return "select "
+ "count(1) as count "
+ "from Notification a "
+ "left join NotificationSubscription b on b.NotificationId=a.Id "
+ $"left join {NotificationManagementDbProperties.DbTablePrefix}NotificationSubscription b on b.NotificationId=a.Id "
+ "where a.IsDeleted=0 "
+ "and a.MessageType=20 "
+ "and b.ReceiveId=@userId ";
@ -114,21 +120,21 @@ namespace CompanyName.ProjectName.NotificationManagement.EntityFrameworkCore.Not
{
return "select count(1) as count from ("
+ "select a.Id, a.Title, a.Content, a.CreationTime, a.SenderId, false as \"Read\" "
+ "from Notification a "
+ $"from {NotificationManagementDbProperties.DbTablePrefix}Notification a "
+ "where a.IsDeleted = 0 "
+ "and a.MessageType = 10 "
+ "and a.Id not in "
+ " (select NotificationId "
+ "from NotificationSubscription b "
+ " where b.ReceiveId = '39febd0a-4c5d-d3b8-b223-ef49e7a3d7e2') "
+ $"from {NotificationManagementDbProperties.DbTablePrefix}NotificationSubscription b "
+ " where b.ReceiveId = @userId) "
+ "union "
+ " select a.Id, a.Title, a.Content, a.CreationTime, a.SenderId, true as \"Read\" "
+ "from Notification a "
+ $"from {NotificationManagementDbProperties.DbTablePrefix}Notification a "
+ " where a.IsDeleted = 0 "
+ " and a.MessageType = 10 "
+ "and a.Id in "
+ " (select NotificationId "
+ "from NotificationSubscription b "
+ $" (select {NotificationManagementDbProperties.DbTablePrefix}NotificationId "
+ $"from {NotificationManagementDbProperties.DbTablePrefix}NotificationSubscription b "
+ "where b.ReceiveId = @userId) "
+ " ) as tt ";
}
@ -137,21 +143,21 @@ namespace CompanyName.ProjectName.NotificationManagement.EntityFrameworkCore.Not
{
return "select * from ("
+ "select a.Id, a.Title, a.Content, a.CreationTime, a.SenderId, false as \"Read\" "
+ "from Notification a "
+ $"from {NotificationManagementDbProperties.DbTablePrefix}Notification a "
+ "where a.IsDeleted = 0 "
+ "and a.MessageType = 10 "
+ "and a.Id not in "
+ " (select NotificationId "
+ "from NotificationSubscription b "
+ " where b.ReceiveId = '39febd0a-4c5d-d3b8-b223-ef49e7a3d7e2') "
+ $"from {NotificationManagementDbProperties.DbTablePrefix}NotificationSubscription b "
+ " where b.ReceiveId = @userId) "
+ "union"
+ " select a.Id, a.Title, a.Content, a.CreationTime, a.SenderId, true as \"Read\" "
+ "from Notification a "
+ $"from {NotificationManagementDbProperties.DbTablePrefix}Notification a "
+ " where a.IsDeleted = 0 "
+ " and a.MessageType = 10 "
+ "and a.Id in "
+ " (select NotificationId "
+ "from NotificationSubscription b "
+ $"from {NotificationManagementDbProperties.DbTablePrefix}NotificationSubscription b "
+ "where b.ReceiveId = @userId)"
+ " ) as tt order by tt.Read,tt.CreationTime ";
}

10
aspnet-core/modules/NotificationManagement/src/CompanyName.ProjectName.NotificationManagement.HttpApi/Notifications/NotificationController.cs

@ -12,13 +12,13 @@ namespace CompanyName.ProjectName.NotificationManagement.Notifications
public class NotificationController : AbpController, IApplicationService
{
private readonly IQueryNotificationAppService _queryNotificationAppService;
private readonly ICommandNotificationAppService _commandNotificationAppService;
private readonly INotificationAppService _notificationAppService;
public NotificationController(IQueryNotificationAppService queryNotificationAppService,
ICommandNotificationAppService commandNotificationAppService)
INotificationAppService notificationAppService)
{
_queryNotificationAppService = queryNotificationAppService;
_commandNotificationAppService = commandNotificationAppService;
_notificationAppService = notificationAppService;
}
@ -52,14 +52,14 @@ namespace CompanyName.ProjectName.NotificationManagement.Notifications
[SwaggerOperation(summary: "消息设置为已读", Tags = new[] {"Notification"})]
public Task SetReadAsync(SetReadInput input)
{
return _commandNotificationAppService.SetReadAsync(input);
return _notificationAppService.SetReadAsync(input);
}
[HttpPost("Create")]
[SwaggerOperation(summary: "创建消息-测试使用", Tags = new[] {"Notification"})]
public Task CreateAsync(CreateNotificationInput input)
{
return _commandNotificationAppService.CreateAsync(input);
return _notificationAppService.CreateAsync(input);
}
}
}

30
aspnet-core/modules/NotificationManagement/test/CompanyName.ProjectName.NotificationManagement.Application.Tests/Samples/SampleAppService_Tests.cs

@ -1,30 +0,0 @@
using System.Threading.Tasks;
using Shouldly;
using Xunit;
namespace CompanyName.ProjectName.NotificationManagement.Samples
{
public class SampleAppService_Tests : NotificationManagementApplicationTestBase
{
private readonly ISampleAppService _sampleAppService;
public SampleAppService_Tests()
{
_sampleAppService = GetRequiredService<ISampleAppService>();
}
[Fact]
public async Task GetAsync()
{
var result = await _sampleAppService.GetAsync();
result.Value.ShouldBe(42);
}
[Fact]
public async Task GetAuthorizedAsync()
{
var result = await _sampleAppService.GetAuthorizedAsync();
result.Value.ShouldBe(42);
}
}
}

17
aspnet-core/modules/NotificationManagement/test/CompanyName.ProjectName.NotificationManagement.Domain.Tests/Samples/SampleManager_Tests.cs

@ -1,17 +0,0 @@
using System.Threading.Tasks;
using Xunit;
namespace CompanyName.ProjectName.NotificationManagement.Samples
{
public class SampleManager_Tests : NotificationManagementDomainTestBase
{
//private readonly SampleManager _sampleManager;
public SampleManager_Tests()
{
//_sampleManager = GetRequiredService<SampleManager>();
}
}
}

12
aspnet-core/modules/NotificationManagement/test/CompanyName.ProjectName.NotificationManagement.EntityFrameworkCore.Tests/EntityFrameworkCore/Samples/SampleRepository_Tests.cs

@ -1,12 +0,0 @@
using CompanyName.ProjectName.NotificationManagement.Samples;
namespace CompanyName.ProjectName.NotificationManagement.EntityFrameworkCore.Samples
{
public class SampleRepository_Tests : SampleRepository_Tests<NotificationManagementEntityFrameworkCoreTestModule>
{
/* Don't write custom repository tests here, instead write to
* the base class.
* One exception can be some specific tests related to EF core.
*/
}
}

22
aspnet-core/modules/NotificationManagement/test/CompanyName.ProjectName.NotificationManagement.TestBase/Samples/SampleRepository_Tests.cs

@ -1,22 +0,0 @@
using System.Threading.Tasks;
using Volo.Abp.Modularity;
using Xunit;
namespace CompanyName.ProjectName.NotificationManagement.Samples
{
/* Write your custom repository tests like that, in this project, as abstract classes.
* Then inherit these abstract classes from EF Core & MongoDB test projects.
* In this way, both database providers are tests with the same set tests.
*/
public abstract class SampleRepository_Tests<TStartupModule> : NotificationManagementTestBase<TStartupModule>
where TStartupModule : IAbpModule
{
//private readonly ISampleRepository _sampleRepository;
protected SampleRepository_Tests()
{
//_sampleRepository = GetRequiredService<ISampleRepository>();
}
}
}

4
aspnet-core/services/host/CompanyName.ProjectName.HttpApi.Host/ProjectNameHttpApiHostModule.cs

@ -78,8 +78,6 @@ namespace CompanyName.ProjectName
ConfigureHangfireMysql(context);
ConfigurationCap(context);
ConfigurationStsHttpClient(context);
}
public override void OnApplicationInitialization(ApplicationInitializationContext context)
@ -122,7 +120,7 @@ namespace CompanyName.ProjectName
Authorization = new[] { new CustomHangfireAuthorizeFilter() },
IgnoreAntiforgeryToken = true
});
if (configuration.GetValue<bool>("Consul:Enabled", false))
{
app.UseConsul();

7
aspnet-core/services/host/CompanyName.ProjectName.IdentityServer/ProjectNameIdentityServerModule.cs

@ -1,5 +1,4 @@
using System;
using System.IO;
using System.Linq;
using Localization.Resources.AbpUi;
using Microsoft.AspNetCore.Builder;
@ -11,16 +10,11 @@ using CompanyName.ProjectName.EntityFrameworkCore;
using CompanyName.ProjectName.Extensions;
using CompanyName.ProjectName.Localization;
using CompanyName.ProjectName.MultiTenancy;
using IdentityServer4.Configuration;
using IdentityServer4.Extensions;
using IdentityServer4.Models;
using Microsoft.Extensions.Configuration;
using StackExchange.Redis;
using Volo.Abp;
using Volo.Abp.Account;
using Volo.Abp.Account.Web;
using Volo.Abp.AspNetCore.Mvc.UI;
using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap;
using Volo.Abp.AspNetCore.Mvc.UI.Bundling;
using Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic;
using Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Bundling;
@ -34,7 +28,6 @@ using Volo.Abp.Caching.StackExchangeRedis;
using Volo.Abp.Localization;
using Volo.Abp.Modularity;
using Volo.Abp.UI.Navigation.Urls;
using Volo.Abp.UI;
using Volo.Abp.VirtualFileSystem;
namespace CompanyName.ProjectName

2
aspnet-core/services/src/CompanyName.ProjectName.DbMigrator/appsettings.secrets.json

@ -1,2 +0,0 @@
{
}

6
aspnet-core/services/src/CompanyName.ProjectName.Domain/Data/Seeds/AbpSettingDataSeedContributor.cs

@ -18,11 +18,7 @@ namespace CompanyName.ProjectName.Data.Seeds
public async Task SeedAsync(DataSeedContext context)
{
// 设置默认语言
var defaultLanguage = await _settingManager.GetOrNullGlobalAsync(DefaultLanguageKey);
if (defaultLanguage == null)
{
await _settingManager.SetGlobalAsync(DefaultLanguageKey, DefaultLanguage);
}
await _settingManager.SetGlobalAsync(DefaultLanguageKey, DefaultLanguage);
}
}
}

1
aspnet-core/shared/CompanyName.ProjectName.Shared.Hosting.Microservices/CompanyName.ProjectName.Shared.Hosting.Microservices.csproj

@ -7,6 +7,7 @@
<ItemGroup>
<PackageReference Include="Ocelot.Provider.Polly" Version="17.0.0" />
<PackageReference Include="Ocelot.Provider.Consul" Version="17.0.0" />
<PackageReference Include="Swashbuckle.AspNetCore.SwaggerUI" Version="6.2.3" />
<PackageReference Include="Volo.Abp" Version="$(AbpPackageVersion)" />
<PackageReference Include="Volo.Abp.AspNetCore" Version="$(AbpPackageVersion)" />
<PackageReference Include="Volo.Abp.Autofac" Version="$(AbpPackageVersion)" />

Loading…
Cancel
Save