2016-02-28 46 views
2

我試圖用NServiceBus設置StructureMap。 我已經下載了所有的包和的NuGet創造了一些文件,對我來說:「沒有爲此對象定義無參數的構造函數。」對於控制器中的IBus使用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,並呼籲從Global.asax中 StructuremapMvc.Start()。同樣的結果。
  • 添加參數構造到所述控制器與 以下它的體:

    _bus = _bus =新容器()的GetInstance <中IBus>();

    但_bus仍爲空,我得到一個異常連接到。

請協助。

+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

相關問題