Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# StructureMap-寄存器泛型类型_C#_Generics_Types_Structuremap - Fatal编程技术网

C# StructureMap-寄存器泛型类型

C# StructureMap-寄存器泛型类型,c#,generics,types,structuremap,C#,Generics,Types,Structuremap,我有以下代码: public class Dispatcher : IDispatcher { public void Send(Order order) { var type = typeof(IOrderHandler<>).MakeGenericType(order.GetType()); var handler = ObjectFactory.GetInstance(type); } } 公共类调度程序:IDispatcher{ 公共无效发送(订单)

我有以下代码:

public class Dispatcher : IDispatcher {
  public void Send(Order order) {
    var type = typeof(IOrderHandler<>).MakeGenericType(order.GetType());
    var handler = ObjectFactory.GetInstance(type);
  }
}
公共类调度程序:IDispatcher{
公共无效发送(订单){
var type=typeof(IOrderHandler).MakeGenericType(order.GetType());
var handler=ObjectFactory.GetInstance(类型);
}
}
注意:我正在尝试获取IOrderHandler,在这种情况下,顺序是: 公共类余序:序{}

我的StructureMap配置如下:

ObjectFactory.Initialize(x => {
  x.For<IOrderHandler>().Use<OrderHandler>();
});
public class CoffeHandler : OrderHandler<CoffeOrder> {
  public override void Handle(CoffeOrder order) {
    // Some Code
  } // CoffeHandler
} 

public interface IOrderHandler {
  void Handle(Order order);
} // IOrderHandler

public interface IOrderHandler<TOrder> : IOrderHandler where TOrder : Order {
  void Handle(TOrder order);
} // IOrderHandler

public abstract class OrderHandler : IOrderHandler {
  public abstract void Handle(Order order);
} // OrderHandler

public abstract class OrderHandler<TOrder> : OrderHandler, IOrderHandler<TOrder> where TOrder : Order {

  public override void Handle(Order order) {
    TOrder torder = (TOrder)order;
    Handle(torder);
  } // Handle

  public abstract void Handle(TOrder order);

} // OrderHandler
ObjectFactory.Initialize(x=>{
x、 For().Use();
});
当我调试它时,会出现以下错误: {“StructureMap配置失败:\r\n错误:104\r\n源:注册表:StructureMap.configuration.DSL.Registry,StructureMap,版本=2.6.4.0

我尝试了其他选项,但最终总是出现104错误或202错误: “StructureMap异常代码:202\n没有为PluginFamily项目Test.Tests+IOrderHandler`1[[Proj.Test.Tests+CoffeOrder,Proj.Test,…]定义默认实例

注意:CoffeOrder是我通过测试的订单类型

我的处理程序类和接口代码如下:

ObjectFactory.Initialize(x => {
  x.For<IOrderHandler>().Use<OrderHandler>();
});
public class CoffeHandler : OrderHandler<CoffeOrder> {
  public override void Handle(CoffeOrder order) {
    // Some Code
  } // CoffeHandler
} 

public interface IOrderHandler {
  void Handle(Order order);
} // IOrderHandler

public interface IOrderHandler<TOrder> : IOrderHandler where TOrder : Order {
  void Handle(TOrder order);
} // IOrderHandler

public abstract class OrderHandler : IOrderHandler {
  public abstract void Handle(Order order);
} // OrderHandler

public abstract class OrderHandler<TOrder> : OrderHandler, IOrderHandler<TOrder> where TOrder : Order {

  public override void Handle(Order order) {
    TOrder torder = (TOrder)order;
    Handle(torder);
  } // Handle

  public abstract void Handle(TOrder order);

} // OrderHandler
公共类CoffeHandler:OrderHandler{
公共覆盖无效句柄(CoffeOrder){
//一些代码
}//CoffeHandler
} 
公共接口IOrderHandler{
无效处理(订单);
}//IOrderHandler
公共接口IOrderHandler:IOrderHandler,其中TOrder:Order{
无效句柄(TOrder命令);
}//IOrderHandler
公共抽象类OrderHandler:IOrderHandler{
公开摘要无效处理(命令);
}//OrderHandler
公共抽象类OrderHandler:OrderHandler,IOrderHandler其中TOrder:Order{
公共覆盖无效句柄(订单){
TOrder TOrder=(TOrder)顺序;
手柄(扭柄);
}//手柄
公开摘要无效处理(托德命令);
}//OrderHandler
谁能帮我一下吗

谢谢,,
Miguel

请注意,您的注册失败,而不是解决问题。您的注册说明:“当请求类型为
IOrderHandler
的类时,请返回
OrderHandler
的具体实例

您的
OrderHandler
是一个抽象类,因此StructureMap无法创建它的具体实例。如果您按照以下方式注册

ObjectFactory.Initialize(
            x => x.For<IOrderHandler<CoffeOrder>>().Use<CoffeHandler>());
如果你有一个
IOrderHandler
的具体的泛型实现,你可以注册它。但是因为你没有,而且[根据我的直觉]你不想注册每一个具体的实例,你需要做一次扫描。如何做到这一点是一个完全不同的问题,在不知道你想扫描什么的情况下,我无法回答。但是你可以在一篇博客文章中看到详细的结构图开放泛型,其中包括一个覆盖扫描的示例