Unity 初始化主要是注册类型映射并指定其生命周期。
在本文中,我们使用了一个接口 IDialer、一个实现了接口的抽象基类 Dialer,二个继承自 Dialer 的具体类 ButtonTypeDialer 和 FigurePlateDialer 类,以及一个使用 Dialer 的 Telephone 类。
生命周期管理
之所以将生命周期的管理放在开始,是因为Unity 会根据在类型的注册时需要指定的生命周期来管理对象的创建和解析。
Unity 使用继承自 LifetimeManager 基类的类来决定如何保存对象实例的引用,以及如何销毁对象。Unity 自带了二个用于生命周期管理的类:ContainerControlledLifetimeManager 和 ExternallyControlledLifetimeManager ,下面分别对这二个类进行描述。如果指定了这二种管理方式,无论是以 RegisterType 还是以 RegisterInstance 注册的类型,都将处理成单件对象。
ContainerControlledLifetimeManager 类是指定 Unity 容器管理注册的对象,即对象的生命周期与 Unity 容器一致,在销毁 Unity 时将销毁所有其管理的对象。同时,
ExternallyControlledLifetimeManager 类指定 Unity 仅保持对象的弱引用,对象的保存和销毁由 Unity 容器外部来控制。
如果不需要处理成单件对象,可以在调用 RegisterType 方法时不指定其 LifetimeManager 类,这样 Unity 容器将使用临时生命周期管理,即为每次对获取对象的请求都创建一个新的实例。
用 RegisterType 注册类型映射
RegisterType 包含多个支持泛型的重载,同时还包含了一一对应的非泛型重载。在此仅对其泛型重载进行阐述,非泛型重载与其对应。
RegisterType 注册类型映射可以是注册接口或基类所对应的类型,也可以直接注册类型。对于前者,在此仅给出接口或基类注册的一种,另一种直接替换即可。
RegisterType<TFrom, TTo>( )
此方法注册一个默认的类型映射,并且为获取对象的每次请求创建一个新的实例。例如如下代码:
在上例中的代码中,前二行即是对类型的注册。运行此代码,结果如下:
而这种注册的对应的配置文件如下:
计算机系统">
同时,将上面的代码修改为如下代码: