我的结构图配置示例有一个奇怪的问题:
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第一个注册示例有问题吗?