我将对象更改为扩展抽象类而不是接口
public interface IService {}
public abstract class BaseService : IService {}
public class ConcreteServiceA : BaseService {
public ConcreteServiceA(IUnityContainer container) {
container.RegisterInstance<IService>("ConcreteServiceA", this);
}
}
public class ConcreteServiceB : BaseService {
public ConcreteServiceB(IUnityContainer container) {
container.RegisterInstance<IService>("ConcreteServiceB", this);
}
}
在Visual Studio中的发布中运行它很有效,我通过使用它们的名称获得了两个不同的IService实例。但是,当我稍后运行app.exe文件时,以下类型的代码会出现异常
private IService GetInstance(string name) {
return m_Container.Resolve<IService>(name);
}
根异常说:
InvalidOperationException - The current type, Common.Interfaces.IService, is an interface and cannot be constructed. Are you missing a type mapping.
当我介绍BaseService抽象类时,问题就出现了。奇怪的是,在VS中启动Release版本时它没有问题,但在运行.exe文件时没有。
编辑:尝试调试版本,并且该.exe文件也没有问题地运行,所以它似乎只是在发布版本中开心
EDIT2:对象是从在引导程序中检测到并初始化的模块实例化的
答案 0 :(得分:0)
看起来您正在尝试解析在创建容器时向容器注册的服务。那么,如何在不首先解决它的情况下注册它,如何在不先注册的情况下解决它?将注册从服务的ctor中拉出来,并将其放在其他地方,例如在ConfigureCOntainer覆盖中。