加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – Unity注册实例并解析

发布时间:2020-12-15 17:41:58 所属栏目:百科 来源:网络整理
导读:我写了一个类,它有一些从unity容器中解析出来的依赖项. 从我的主类我创建一个新对象 MyObject myObject = new MyObject(); 我用我的Unity容器注册它 UContainer.RegisterInstanceMyObject(myObject,new ExternallyControlledLifetimeManager()); 我创建了需
我写了一个类,它有一些从unity容器中解析出来的依赖项.

从我的主类我创建一个新对象

MyObject myObject = new MyObject();

我用我的Unity容器注册它

UContainer.RegisterInstance<MyObject>(myObject,new ExternallyControlledLifetimeManager());

我创建了需要它作为依赖的类型

ConsumerObject consumer = new ConsumerObject();

消费者看起来像这样:

public class ConsumerObject
{
    public ConsumberObject()
    {
         theObject = (MyObject)UContainer.Resolve(typeof(MyObject));    
    }
}

这引发了一个异常:

Resolution of the dependency failed,type = “MyObject”,name = “”. Exception message is: The current build operation (build key Build Key[MyObject,null]) failed: The parameter pp could not be resolved when attempting to call constructor MyObject(IPreferenceStorageProvider pp). (Strategy type BuildPlanStrategy,index 3)

为什么我的解决方案会尝试在该类型上调用另一个contsructor?我已经创建了它并注册了实例..我也尝试过:theObject = UContainer.Resolve< MyObject>();似乎没有任何区别..

谢谢

解决方法

我认为问题是你使用ExternallyControlledLifetimeManager.在这种情况下,Unity容器仅包含对您的实例的弱引用.当您尝试解决时,您的实例已经被垃圾收集了.这就是为什么.RegisterInstance()的默认LifeTimeManager是ContainerControlledLifeTimeManager.
而Darrel Miller的案例也有效,因为它还没有GC编辑.
尝试以这种方式注册您的实例:
UContainer.RegisterInstance<MyObject>(myObject);

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读