HangFire job activator based on MEF IoC Container
C#
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
.nuget
HangFire.MEF
Hangfire.MEF.Tests
.gitignore
HangFire.MEF.sln
LICENSE
README.md

README.md

Hangfire.MEF

Build status

Hangfire background job activator based on MEF IoC Container. It allows you to use instance methods of classes that define parametrised constructors:

[Export]
public class EmailService
{
    private DbContext _context;
    private IEmailSender _sender;

    [ImportingConstructor]
    public EmailService(DbContext context, IEmailSender sender)
    {
        _context = context;
        _sender = sender;
    }

    public void Send(int userId, string message)
    {
        var user = _context.Users.Get(userId);
        _sender.Send(user.Email, message);
    }
}   

// Somewhere in the code
BackgroundJob.Enqueue<EmailService>(x => x.Send(1, "Hello, world!"));

Improve the testability of your jobs without static factories!

Installation

Hangfire.MEF is available as a NuGet Package. Type the following command into NuGet Package Manager Console window to install it:

Install-Package Hangfire.MEF

Usage

The package provides an extension method for OWIN bootstrapper:

AggregateCatalog catalog = new AggregateCatalog();
catalog.Catalogs.Add(new AssemblyCatalog(Assembly.GetExecutingAssembly()));
// add other assembly, directory, aggregate catalogs etc. here
var container = new CompositionContainer(catalog);

app.UseHangfire(config =>
{
    config.UseMEFActivator(container);
});

In order to use the library outside of web application, set the static JobActivator.Current property:

var container = new CompositionContainer();
JobActivator.Current = new MEFJobActivator(container);

HTTP Request warnings

Services registered with InRequestScope() directive will be unavailable during job activation, you should re-register these services without this hint.

HttpContext.Current is also not available during the job performance. Don't use it!

Credits

This project and this readme is based on the Hangfire.Ninject project by Sergey Odinokov Many thanks go out to him for his great work on the Hangfire project as well.