Custom Endpoint Initialization

Component: NServiceBus
NuGet Package: NServiceBus (5.x)
Standard support for version 5.x of NServiceBus has expired. For more information see our Support Policy.

Classes that implement NServiceBus.INeedInitialization are created and called as one of the first steps performed during endpoint creation. Use INeedInitialization to register components that will be used later in the endpoint creation sequence.

INeedInitialization exists in both the NServiceBus.Config and the NServiceBus namespaces. NServiceBus.Config.INeedInitialization is marked as obsolete and will cause a compile-time error.

Instances are:

  • Located by assembly scanning.
  • Created as one of the very first steps when the bus is created.
  • Created on the same thread that is creating the bus.
  • Created with Activator.CreateInstance(...) which means they:
    • Are not resolved from dependency injection (even if they are registered there).
    • Will not have any dependencies injected.
    • Must have a default constructor.

Once instantiated, Customize(...) is called on each instance. These calls are made on the same thread that is creating the endpoint. The order in which instances are instantiated and run is non-deterministic and should not be relied upon.

Exceptions thrown by instances of INeedInitialization are not handled by NServiceBus and will bubble up to the caller creating the endpoint.

Instances of INeedInitialization are created after type-scanning has occurred. Do not attempt to alter the types to be scanned from an instance of INeedInitialization.
class NeedsInitialization :
    INeedInitialization
{
    public void Customize(BusConfiguration busConfiguration)
    {
        // Perform initialization
        // This is after type scanning.
        // Do NOT call the following here:
        // busConfiguration.AssembliesToScan();
        // busConfiguration.ScanAssembliesInDirectory();
        // busConfiguration.TypesToScan();
    }
}

Samples


Last modified