AgentStack
Browse Sign in
Browse Why AgentStack Sell Docs
Sign in
SKILL verified MIT Self-run

Abp Infrastructure

skill-burakdmir-abp-skills-abp-infrastructure · by burakdmir

ABP Framework v10.4 infrastructure: Distributed Event Bus, Background Jobs/Workers, Caching (Redis), BLOB Storing, Emailing, SignalR, IClock, Distributed Locking, Entity Cache. Use when you need an event bus, background job, cache, blob or email in ABP.

No reviews yet
0 installs
37 views
0.0% view→install

Install

$ agentstack add skill-burakdmir-abp-skills-abp-infrastructure

✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.

Security review

✓ Passed

No issues found. Passed automated security review. · v0.1.0 How review works →

  • Prompt-injection patterns
  • Secret / credential exfiltration
  • Dangerous shell & filesystem operations
  • Untrusted network calls
  • Known-malicious package signatures

What it can access

  • Network access No
  • Filesystem access No
  • Shell / process execution No
  • Environment & secrets No
  • Dynamic code execution No

From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.

View the full security report →

Verified badge

Passed review? Show it. Paste this badge into your README, it links to the public security report.

AgentStack Verified badge Links to your public security report.
[![AgentStack Verified](https://agentstack.voostack.com/badges/verified.svg)](https://agentstack.voostack.com/security/report/skill-burakdmir-abp-skills-abp-infrastructure)

Reliability & compatibility

Security review passed
0 installs to date
no reviews yet
3mo ago

Declared compatibility

Claude CodeClaude Desktop

Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.

Preview Execution monitoring

We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.

How agent discovery & health will work →
Are you the author of Abp Infrastructure? Claim this listing to set pricing, connect Stripe payouts, and keep 70% of every sale.
Sign up to claim

About

ABP Framework — Infrastructure

ABP Framework v10.4 infrastructure components. Event Bus, Background Jobs, Caching, BLOB Storing, Emailing, Data Filtering, Data Seeding, Settings, Features, Virtual File System, Entity Cache, Distributed Locking.

Trigger

  • "ABP event bus"
  • "ABP background job"
  • "ABP cache"
  • "ABP Redis"
  • "ABP BLOB"
  • "ABP email"
  • "ABP data filter"
  • "ABP data seeding"
  • "ABP settings"
  • "ABP features"
  • "ABP virtual file"
  • "ABP entity cache"
  • "ABP distributed lock"
  • "ABP current user"
  • "ABP infrastructure"

Event Bus

| Type | Interface | Usage | |---|---|---| | Local | ILocalEventBus, ILocalEventHandler | Same process | | Distributed | IDistributedEventBus, IDistributedEventHandler | Across processes |

// Event
public class StockCountChangedEvent { public Guid ProductId { get; set; } public int NewCount { get; set; } }

// Publish (service)
await _localEventBus.PublishAsync(new StockCountChangedEvent { ProductId = id, NewCount = count });

// Publish (entity)
public class Product : AggregateRoot
{
    public void ChangeStock(int count) { StockCount = count; AddLocalEvent(new StockCountChangedEvent { ... }); }
}

// Handler
public class Handler : ILocalEventHandler, ITransientDependency
{
    [UnitOfWork]
    public virtual async Task HandleEventAsync(StockCountChangedEvent e) { /* logic */ }
}

Distributed Providers: Local (default), RabbitMQ, Kafka, Azure Service Bus, Rebus

Rule: Microservice → Distributed, Modular Monolith → Distributed (inter-module), Monolith → Local

Background Jobs

public class EmailSendingArgs { public string Email { get; set; } public string Subject { get; set; } public string Body { get; set; } }

public class EmailSendingJob : AsyncBackgroundJob, ITransientDependency
{
    private readonly IEmailSender _emailSender;
    public EmailSendingJob(IEmailSender emailSender) => _emailSender = emailSender;
    public override async Task ExecuteAsync(EmailSendingArgs args) =>
        await _emailSender.SendAsync(args.Email, args.Subject, args.Body);
}

// Enqueue
await _backgroundJobManager.EnqueueAsync(new EmailSendingArgs { ... }, priority: BackgroundJobPriority.Normal, delay: TimeSpan.FromMinutes(5));

Providers: Default (in-memory/DB), Hangfire, Quartz, RabbitMQ

Caching

[CacheName("Books")]
public class BookCacheItem { public string Name { get; set; } public float Price { get; set; } }

public class BookService : ITransientDependency
{
    private readonly IDistributedCache _cache;
    public BookService(IDistributedCache cache) => _cache = cache;

    public async Task GetAsync(Guid id) =>
        await _cache.GetOrAddAsync(id, async () => await GetFromDbAsync(id),
            () => new DistributedCacheEntryOptions { AbsoluteExpiration = DateTimeOffset.Now.AddHours(1) });
}

Redis: abp add-package Volo.Abp.Caching.StackExchangeRedis

"Redis": { "IsEnabled": "true", "Configuration": "127.0.0.1" }

Why the ABP Redis package? Has SetManyAsync/GetManyAsync (not in Microsoft's), simple configuration.

Batch: GetManyAsync, SetManyAsync, GetOrAddManyAsync, RemoveManyAsync

UOW-level: await _cache.SetAsync(key, value, considerUow: true)

BLOB Storing

[BlobContainerName("product-images")]
public class ProductImageBlobContainer : AbpBlobContainer { }

// Usage
await _blobContainer.SaveAsync(productId.ToString(), imageBytes, true);
var bytes = await _blobContainer.GetAllAsync(productId.ToString());

Providers: FileSystem, Database, AWS S3, Azure, MinIO, Google, Alibaba, Bunny, Memory

Emailing

await _emailSender.SendAsync(to: email, subject: "Welcome!", body: "...", isBodyHtml: true);

Data Filtering

using (_dataFilter.Disable()) { return await _repository.GetListAsync(); }
using (_dataFilter.Disable()) { return await _repository.GetCountAsync(); }

Data Seeding

public class MyDataSeedContributor : IDataSeedContributor, ITransientDependency
{
    public async Task SeedAsync(DataSeedContext context)
    {
        if (await _roleRepository.FindAsync(x => x.Name == "Admin") == null)
            await _roleRepository.InsertAsync(new IdentityRole(GuidGenerator.Create(), "Admin"));
    }
}

Settings

public class MyAppSettings : SettingDefinitionProvider
{
    public override void Define(ISettingDefinitionContext context) =>
        context.Add(new SettingDefinition("MyApp.MaxPrice", defaultValue: "1000", isVisibleToClients: true));
}

// Usage
var max = await _settingProvider.GetOrNullAsync("MyApp.MaxPrice");
await SettingManager.SetAsync("MyApp.MaxPrice", "2000");

Features

public class MyAppFeatures : FeatureDefinitionProvider
{
    public override void Define(IFeatureDefinitionContext context) =>
        context.Add(new FeatureDefinition("MyApp.Premium", defaultValue: "false"));
}

// Usage
var enabled = await _featureChecker.IsEnabledAsync("MyApp.Premium");

Virtual File System

Configure(options => options.FileSets.AddEmbedded());

Current User

var userId = CurrentUser.Id;
var userName = CurrentUser.UserName;
var tenantId = CurrentUser.TenantId;
var roles = CurrentUser.Roles;
var isAuthenticated = CurrentUser.IsAuthenticated;

Distributed Locking

await using var handle = await _distributedLock.TryAcquireAsync("my-lock-key");
if (handle != null) { /* critical operation */ }

Best Practices

  1. Publish events from the entity, handle them in the service
  2. Move long-running work to a background job
  3. Use GetOrAddAsync, set expiration
  4. Use the BLOB provider abstraction
  5. Disable the data filter with using
  6. Settings for runtime-changeable values
  7. Features for per-tenant toggles

Related

[DDD](../abp-ddd/SKILL.md) · [Microservices](../abp-microservices/SKILL.md) · [Deployment](../abp-deployment/SKILL.md) · [Settings & Features](../abp-settings-features/SKILL.md) · Docs: https://abp.io/docs/latest/framework/infrastructure

Source & license

This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.

Install and usage instructions live in the source repository linked above.

Reviews

No reviews yet, be the first.

Versions

  • v0.1.0 Imported from the upstream source.