"No parameterless constructor defined for this object." 控制器中的 IBus 使用 StructureMap
"No parameterless constructor defined for this object." for IBus in controller using StructureMap
我正在尝试使用 NServiceBus 设置 StructureMap。
我已经下载了所有包并且 NuGet 为我创建了一些文件:
这是这些文件中的代码
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();
}
}
那是我得到错误的时候
No parameterless constructor defined for this object.
这很奇怪,因为这一行
scan.WithDefaultConventions();
如果我尝试注入 IBus,应该排除这个问题。
我已经尝试过什么:
- 从 StructuremapMvc.cs 中删除 [assembly: ...] 并调用
StructuremapMvc.Start() 来自 Global.asax。同样的结果。
向控制器添加了无参数构造函数,如下所示
它的正文:
_bus = _bus = new Container().GetInstance< IBus>();
但是 _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));
我正在尝试使用 NServiceBus 设置 StructureMap。 我已经下载了所有包并且 NuGet 为我创建了一些文件:
这是这些文件中的代码
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();
}
}
那是我得到错误的时候
No parameterless constructor defined for this object.
这很奇怪,因为这一行
scan.WithDefaultConventions();
如果我尝试注入 IBus,应该排除这个问题。
我已经尝试过什么:
- 从 StructuremapMvc.cs 中删除 [assembly: ...] 并调用 StructuremapMvc.Start() 来自 Global.asax。同样的结果。
向控制器添加了无参数构造函数,如下所示 它的正文:
_bus = _bus = new Container().GetInstance< IBus>();
但是 _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));