1、InstancePerDependency
對每一個依賴或每一次調用創建一個新的唯一的實例。這也是默認的創建實例的方式。
官方文檔解釋:Configure the component so that every dependent component or call to Resolve() gets a new, unique instance (default.)
2、InstancePerLifetimeScope
在一個生命周期域中,每一個依賴或調用創建一個單一的共享的實例,且每一個不同的生命周期域,實例是唯一的,不共享的。
官方文檔解釋:Configure the component so that every dependent component or call to Resolve() within a single ILifetimeScope gets the same, shared instance. Dependent components in different lifetime scopes will get different instances.
3、InstancePerMatchingLifetimeScope
在一個做標識的生命周期域中,每一個依賴或調用創建一個單一的共享的實例。打了標識了的生命周期域中的子標識域中可以共享父級域中的實例。若在整個繼承層次中沒有找到打標識的生命周期域,則會拋出異常:DependencyResolutionException。
官方文檔解釋:Configure the component so that every dependent component or call to Resolve() within a ILifetimeScope tagged with any of the provided tags value gets the same, shared instance. Dependent components in lifetime scopes that are children of the tagged scope will share the parent's instance. If no appropriately tagged scope can be found in the hierarchy an DependencyResolutionException is thrown.
4、InstancePerOwned
在一個生命周期域中所擁有的實例創建的生命周期中,每一個依賴組件或調用Resolve()方法創建一個單一的共享的實例,並且子生命周期域共享父生命周期域中的實例。若在繼承層級中沒有發現合適的擁有子實例的生命周期域,則拋出異常:DependencyResolutionException。
官方文檔解釋:Configure the component so that every dependent component or call to Resolve() within a ILifetimeScope created by an owned instance gets the same, shared instance. Dependent components in lifetime scopes that are children of the owned instance scope will share the parent's instance. If no appropriate owned instance scope can be found in the hierarchy an DependencyResolutionException is thrown.
5、SingleInstance
每一次依賴組件或調用Resolve()方法都會得到一個相同的共享的實例。其實就是單例模式。
官方文檔解釋:Configure the component so that every dependent component or call to Resolve() gets the same, shared instance.
6、InstancePerHttpRequest
在一次Http請求上下文中,共享一個組件實例。僅適用於asp.net mvc開發。
官方文檔解釋:Share one instance of the component within the context of a single HTTP request.
轉載自:http://blog.csdn.net/dhx20022889/article/details/9061483
Foible 朋友的說法不對。
B b=new B(); 這種方式,實際上是實例化了子類的對象,注意:內存中還是子類對象。
((A)b).m(); 表面上看起來是父類對象了,但是由於內存中是子類對象,所以調用的還是子類方法。
A b=new B();
b.m();
這種方法和你寫的實際是一個效果,雖然上溯造型到了父類,由於子類重寫了父類的方法,調用的還是子類的方法(也就是所:方法的實現,最後是在子類中實現的)。
所以,總結如下:
如果子類沒有重寫父類的方法,調用父類的方法的時候,實際上是去父類的內存中實現,可以調用父類方法。
如果子類重寫了父類的方法,那麼,你雖然上溯造型到了父類,由於內存還是子類,該方法的實現還是在子類,所以用實例化的對象是調用不到父類的,這種情況下,只能用super關鍵字。
用static的情況不討論的情況下不討論是這樣的,不知道到您是否不滿意,不滿意的話可以發消息繼續討論。