StructureMap通过Generic Interfaces超出范围

时间:2015-10-23 18:50:33

标签: c# .net dependency-injection structuremap structuremap3

我的结构图配置示例有一个奇怪的问题:

IReturnValue

 public interface IReturnValue {
 }

IService

 public interface IService<T> where T : IReturnValue {
    void Execute();
  }

有两个实现:

ServiceA:

public class ServiceA : IService<IReturnValue> {
   public void Execute() {
     //do something 
   }          
}

ServiceB

public class ServiceB : IService<IReturnValue> {    
   public void Execute() {
     //do something
   }  
}

注册表

现在我在main方法中注册ServiceA和ServiceB :(注意顺序!)

static void Main(string[] args)
 {
   IContainer container = new Container();
   container.Configure(c => c.For<ServiceB>().Use<ServiceB>());
   container.Configure(c => c.For<IService<IReturnValue>>().Use<ServiceA>());
 }

问题:

在注册ServiceA期间,此异常抛出:

Specified argument was out of the range of valid values.
Parameter name: instance 'Example.ServiceA' with ReturnType 
Example.ServiceA cannot be cast to Example.ServiceB

没有InnerException,也没有其他错误。

注册表更改了订单

当我更改注册顺序时,一切正常,我可以使用这些服务。

static void Main(string[] args)
    {
        IContainer container = new Container();
        container.Configure(c => c.For<IService<IReturnValue>>().Use<ServiceA>());
        container.Configure(c => c.For<ServiceB>().Use<ServiceB>());
}

有人可以解释一下为什么structmap第一个注册示例有问题吗?

  • StructureMap:3.0.5.130
  • .Net 4.5

0 个答案:

没有答案