2016-02-28 2 views
2

Я пытаюсь установить StructureMap с NServiceBus. Я скачал все пакеты и NuGet создали несколько файлов для меня:«Нет конструктора без параметров, определенного для этого объекта». для IBus в контроллере using StructureMap

New files by NuGet for StructureMap

Вот код в этих файлах

IoC.cs:

public static class IoC { 
    public static IContainer Initialize() { 
     var cont = new Container(); 
     cont.Configure(x => 
        { 
         x.Scan(scan => 
           { 
            scan.TheCallingAssembly(); 
            scan.WithDefaultConventions(); 
           }); 
         //x.For<IExample>().Use<Example>(); 
        }); 
     return cont; 
    } 
} 

StructureMap.cs :

[assembly: WebActivator.PreApplicationStartMethod(typeof(MyProjectName.App_Start.StructuremapMvc), "Start")] 

namespace MyProjectName.App_Start { 
    public static class StructuremapMvc { 
     public static void Start() { 
      IContainer container = IoC.Initialize(); 
      DependencyResolver.SetResolver(new StructureMapDependencyResolver(container)); 
      GlobalConfiguration.Configuration.DependencyResolver = new StructureMapDependencyResolver(container); 
     } 
    } 
} 

Не менялся все, так что эти файлы являются способом, они были созданы. Затем я добавил конструктор в одном из моих контроллеров:

public class ProductsController : Controller 
{ 
    private readonly IBus _bus; 

    public ProductsController(IBus bus) 
    { 
     _bus = bus; 
    } 

    public ActionResult Index() 
    { 
     ViewBag.Title = "Product list"; 

     var message = new ProductMessage(); 
     _bus.Send(message); 

     return View(); 
    } 
} 

Вот когда я получил ошибку

Нет конструктор без параметров определяется для данного объекта.

что странно, так как эта линия

scan.WithDefaultConventions(); 

следует исключить этот вопрос, если я пытаюсь привнести IBUS.

Что я уже пробовал:

  • Удаление [сборки: ...] из StructuremapMvc.cs и вызова StructuremapMvc.Start() из Global.asax. Тот же результат.
  • Добавлен конструктор без параметров в контроллер со следующими в это тело:.

    _bus = _bus = новый контейнер() GetInstance < IBus>();

    но _bus все еще был null, и я получил исключение, связанное с этим.

Пожалуйста, помогите.

+0

Довольно прямо вперед. Для реализации IBus вам нужен конструктор без параметров. Если вы покажете код для этой реализации, я могу конкретно показать вам, что вам нужно сделать. – pquest

+0

@pquest Да, если я поставлю безреугольный конструктор в свой контроллер, ошибка исчезнет. Но мне нужен экземпляр IBus в этом контроллере, и не имеет значения, поставил ли я его как параметр или попытался его решить отдельно, IBus все еще не может быть разрешен. Вы можете увидеть реализацию выше: ProductsController – XpyM

+0

Какую версию 'StructureMap' вы используете? Какие пакеты и версии NuGet вы установили? – NightOwl888

ответ

4

Тот же контейнер для вашего собственного кода и NServiceBus должен быть настроен. Ниже код показывает эту конфигурацию для StructureMap.

BusConfiguration busConfiguration = new BusConfiguration(); 

//Configure the container and use the same one for MVC and NServiceBus  
Container container = new Container(); 

busConfiguration.UseContainer<StructureMapBuilder>(c => c.ExistingContainer(container)); 

More information

Смежные вопросы