Unity Application Block 学习笔记 之 延迟加载

Unity有个很不错的特性就是支持延迟获取, 其本质是通过事先建立一个委托,然后再调用这个委托,看下下面的代码:
 
 
 
 
 
public interface IClass
{
    void ShowInfo();
}
public class MyClass : IClass
{
    public MyClass()
    {
    }       
    public void ShowInfo()
    {
        Console.WriteLine( "这个是我的班级" );
    }
}
 
public static void DeferringResolve()
{
    var resolver = container.Resolve<Func<IClass>>();
    //根据业务逻辑做其他事情。
    //注册IClass与MyClass之间的关系
    container.RegisterType<IClass, MyClass>();
    //获取MyClass实例
    var myClass = resolver();
    var resolver2 = container.Resolve<Func<IEnumerable<IClass>>>();
    //根据业务逻辑做其他事情。
    //注册与IClass相关的对象。
    container.RegisterType<IClass, MyClass>("my");
    container.RegisterType<IClass, YourClass>("your");
    //获取与IClass关联的所有命名实例,非命名实例不会包含在内
    var classList = resolver2();
}

这段代码演示了2个延迟获取的方式,都是通过将Func<T>放入Resolve<T>中来实现的,返回的是一委托,这样就可以在实际需要的时候再调用这个委托:

1、第一种是事先通过Resolve<Func<IClass>>(); 来定义获取与IClass关联的对象的委托,然后再注册IClass与MyClass之间的关系,然后再通过resolver(); 来获取。

2、第二种是事先通过Resolve<Func<IEnumerable<IClass>>>(); 来定义获取一个与IClass关联的命名实例列表的委托,然后调用相应的委托就可以一次性获取与IClass关联的所有命名实例。

这2种方式都很好的展示了Unity可以更加灵活的控制对象之间的注册与对象的调用。原文引用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值