【问题标题】:How can I extend a Unity catalog at runtime?如何在运行时扩展 Unity 目录?
【发布时间】:2011-03-31 16:32:43
【问题描述】:

我想将我的大部分接口映射到我的 app.config 文件中的具体类。但是,我想在运行时将一些接口注册到同一个 Unity 目录。我尝试了下面的代码,但它给了我一个 SynchronizationLockException: Object synchronization method was called from an unsynchronized block of code.

IUnityContainer container = new UnityContainer();

UnityConfigurationSection configSection =
    (UnityConfigurationSection)ConfigurationManager.GetSection("unity");
configSection.Containers.Default.Configure(container);

container.RegisterInstance<IInterface>(new ConcreteObject());

如何在运行时在从 app.config 初始化的 Unity 目录中注册对象?

我使用的是 Prism4 附带的 Unity 版本 (2.0)。

【问题讨论】:

    标签: c# unity-container app-config ioc-container unity2.0


    【解决方案1】:

    这是注册统一对象时的常见问题,但在技术上不是错误。将您的注册更改为:

    container.RegisterType<IInterface, ConcreteObject>(new ContainerControlledLifetimeManager());
    

    这应该可以解决您的问题。

    由于以下原因引发了该异常:

    Can Unity be made to not throw SynchronizationLockException all the time?

    【讨论】:

    • 谢谢指点,但是对象实例怎么传入呢?
    • 当你请求它时,它应该会为你创建实例。
    • 是的,但我不希望它新建一个新实例。我希望它返回一个我在运行时向容器注册的实例。
    猜你喜欢
    • 2013-09-20
    • 1970-01-01
    • 1970-01-01
    • 2018-12-02
    • 2013-10-14
    • 2020-07-23
    • 2015-11-01
    • 1970-01-01
    • 2011-05-25
    相关资源
    最近更新 更多