Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

MicroBus is a simple in process Mediator for .NET

License

NotificationsYou must be signed in to change notification settings

daniellittledev/Enexure.MicroBus

Repository files navigation

Build status

MicroBus is a simple in process mediator for .NET

PM> Install-PackageEnexure.MicroBus.Autofac

I wanted a super simple mediator with great support for global handlers. With MicroBus message handlers and global handlers are first class citizens making it easy to get started.

Registering a set of handlers takes a few just lines of code and is fairly terse.

varbusBuilder=newBusBuilder()// Global Handlers run in order so these are explicitly registered.RegisterGlobalHandler<LoggingHandler>().RegisterGlobalHandler<SecurityHandler>().RegisterGlobalHandler<ValidationHandler>().RegisterGlobalHandler<TransactionHandler>()// Scan an assembly to find all the handlers.RegisterHandlers(assembly);

Once your registrations are sorted out then it's just a matter of adding MicroBus to your DI container. Here is now we register MicroBus to Autofac.

autofacContainerBuilder.RegisterMicroBus(busBuilder);

MicroBus has two main interfaces, the bus and the mediator. A bus will work with the message types, commands, events and queries(request/response). This imposes a strong set of rules around what a message can do. For example you can only have at most one handler for a query or command.

given(IMicroBusbus)        bus.SendAsync(newTestCommand());// ICommandbus.QueryAsync(newTestQuery());// IQuery<Query, Result>bus.PublishAsync(newTestEvent());// IEvent

The other is the mediator which is more general. Messages can be anything and don't need to implement any specific interface. This can be useful when interfacing with existing message contracts.

given(IMicroMediatormediator)          mediator.SendAsync(anyObject);mediator.QueryAsync(anyObject);mediator.PublishAsync(anyObject);

Commands are the typical entry point for an application. A command is something that you ask the system to do. For example, create a new page the the name of a command is always in the imperative tense. Commands are also interesting in that they don't return anything. In our create a page example you would say create the page "home" or create an object that I can refer to with this Guid instead of create a page and return the Id. The great part about this is you already know what the Id of the resource is going to be.

classTestCommand:ICommand{}classTestCommandHandler:ICommandHandler<TestCommand>{publicasyncTaskHandle(TestCommandcommand){Console.WriteLine("Test command handler");}}

One of the most important things an application needs is a way to deal with cross cutting concerns. In MicroBus this is where global handlers come in. They provide a great way to do work before messages get to the handlers. They also use the nested Russian Doll style approach so each handler will internally call the next handler or handler in the chain.

publicclassCrossCuttingHandler:IDelegatingHandler{publicasyncTask<object>Handle(INextHandlernext,objectmessage){using(vartransaction=unitOfWork.NewTransaction()){returnawaitnext.Handle(message);}}}

Currently MicroBus only comes with built insupport for Autofac.

For more examples check out theEnexure.MicroBus.Tests project or thissample WebApi project.

About

MicroBus is a simple in process Mediator for .NET

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors2

  •  
  •  

[8]ページ先頭

©2009-2025 Movatter.jp