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可以更加灵活的控制对象之间的注册与对象的调用。原文引用

你可能感兴趣的:(Unity Application Block 学习笔记 之 延迟加载)