0

Using .NET 4.5.2, Visual studio 2017, C# 7.1, Unity, NServiceBus 6.

I receive the following error: Exception error

My application is a console app, here's some of the Program.cs code:

private static async Task ConfigureUnity()
    {
        IUnityContainer container = new UnityContainer();

        var endpointConfiguration = new EndpointConfiguration("NSB.ChannelAdvisorService");
        var transport = endpointConfiguration.UseTransport<LearningTransport>();
        endpointConfiguration.AssemblyScanner().ExcludeAssemblies("netstandard");

        endpointConfiguration.UseContainer<UnityBuilder>(
            customizations =>
            {
                customizations.UseExistingContainer(container);
            });

        var endpointInstance = Endpoint.Start(endpointConfiguration).GetAwaiter().GetResult();
        //register
        container.RegisterType(typeof(IGenericHttpRequestRepository<>), typeof(GenericHttpRequestRepository<>), new TransientLifetimeManager());
        container.RegisterType<IOrderRepository, OrderRepository>();
        container.RegisterType<IShipmentRepository, ShipmentRepository>();
        container.RegisterType<IOrderProcessService, OrderProcessService>();
        container.RegisterType<IShipmentService, ShipmentService>();
        container.RegisterInstance(endpointConfiguration);

        //resolve 
        var orderProcessService = container.Resolve<IOrderProcessService>();
        var shipmentService = container.Resolve<IShipmentService>();
 .....

As you can see I'm using Unity and NServiceBus, this is to register DI and also use it withing NServicebus so i can DI it into my service to send a command.

The service trys to DI "IEndpointInstance"

public class OrderProcessService : IOrderProcessService
{
    private static Logger logger = LogManager.GetCurrentClassLogger();

    private readonly IEndpointInstance _endpoint;

    public OrderProcessService(IEndpointInstance endpoint)
    {
        _endpoint = endpoint;
    }

    public async Task PostNewOrderBatch()
    {
        var list = _orderRepository.GetBatchedOrders();

        foreach(var item in list)// parallel this?
        {
            await _endpoint.Send(item.ToObject<ProcessBatchOrdersCommand>()).ConfigureAwait(false);

    _orderRepository.DeleteFile(item.Property("FilePath").Value.ToString());
        }
    }
}

I get the feeling it could be an issue about the order of things, I don't think I've missed anything out as far as i can tell in some examples?

lemunk
  • 2,616
  • 12
  • 57
  • 87
  • Hope this can help you: https://stackoverflow.com/questions/948785/typeloadexception-says-no-implementation-but-it-is-implemented – rodrigogq Dec 08 '17 at 14:01
  • wierd, i just got the sample solution from nservicebus unity, tried it on my machine and got the same error. Also tried it on a different machine, same error... – lemunk Dec 08 '17 at 16:38
  • This sample? https://docs.particular.net/samples/dependency-injection/unity/?version=unity_8 – Sean Farmar Dec 10 '17 at 06:26
  • no, this one https://github.com/Particular/docs.particular.net/tree/master/samples/dependency-injection/unity/Unity_8 doesnt work on my windows 7 machine – lemunk Dec 12 '17 at 09:59
  • @lemunk see https://stackoverflow.com/questions/47713897/nservicebus-unity-endpoint-failed-to-start#comment82755074_47749666 – Daniel Marbach Dec 20 '17 at 07:17

1 Answers1

1

In NServiceBus v6 and later the endpoint instance is no longer automatically registered in the container. You need to register the endpoint instance returned from Endpoint.Start(configuration) on the existing container.

See https://docs.particular.net/nservicebus/dependency-injection/#using-an-existing-instance-endpoint-resolution

Daniel Marbach
  • 2,294
  • 12
  • 15
  • already tried, seems to be an issue with the version of the sample. – lemunk Dec 12 '17 at 10:00
  • 1
    We are using NuGet wild cards in our samples, and it appears that a recent release of Unity broke SemVer, so we raised an issue: https://github.com/unitycontainer/unity/issues/171 – Bob.Langley Dec 19 '17 at 19:50