使用Unity运行.exe时解决异常,但在Visual Studio中运行发布时不解决异常

时间:2016-02-19 14:06:41

标签: c# visual-studio unity-container prism

我将对象更改为扩展抽象类而不是接口

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:对象是从在引导程序中检测到并初始化的模块实例化的

1 个答案:

答案 0 :(得分:0)

看起来您正在尝试解析在创建容器时向容器注册的服务。那么,如何在不首先解决它的情况下注册它,如何在不先注册的情况下解决它?将注册从服务的ctor中拉出来,并将其放在其他地方,例如在ConfigureCOntainer覆盖中。