c# - "No parameterless constructor defined for this object."用于 Controller 中使用 StructureMap 的 IBus

标签 c# asp.net dependency-injection nservicebus structuremap

我正在尝试使用 NServiceBus 设置 StructureMap。 我已经下载了所有包,并且 NuGet 为我创建了一些文件:

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);
        }
    }
}

没有更改任何内容,因此这些文件就是它们创建的方式。 然后我在我的一个 Controller 中添加了一个构造函数:

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();
    }
}

这就是我收到错误的时候

No parameterless constructor defined for this object.

这很奇怪,因为这一行

scan.WithDefaultConventions();

如果我尝试注入(inject) IBus,应该排除此问题。

我已经尝试过什么:

  • 从 StructuremapMvc.cs 中删除 [程序集:...] 并调用 Global.asax 中的 StructuremapMvc.Start()。结果相同。
  • 向 Controller 添加了无参数构造函数,如下所示 它的 body :

    _bus = _bus = new Container().GetInstance();

    但是 _bus 仍然为空,并且我遇到了与之相关的异常。

请帮忙。

最佳答案

应该为您自己的代码和 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

关于c# - "No parameterless constructor defined for this object."用于 Controller 中使用 StructureMap 的 IBus,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35685819/

相关文章:

c# - 如何从流中删除转义序列

c# - 这两个 StructureMap 配置有什么区别?

c# - 如何在没有 C# 类的情况下查找子列表的索引

c# - EF 4.3 多重枚举问题

c# - 如何在不知道任何字段的情况下填充 gridView

asp.net - 对 .net Web 服务(asmx、wcf 等)进行 AJAX (jquery) 调用时的授权、身份验证,我需要了解什么?

c# - MEF 和抽象工厂

javascript - 用于自定义函数的 AngularJS DI

c# - Roslyn,如何在运行时在脚本中实例化一个类并调用该类的方法?

javascript - 从 Javascript 使用 Web 服务