5
爲什麼.NET MVC源代碼ControllerBuilder類使用委託給控制器工廠?:MVC源代碼Singleton模式
private Func<IControllerFactory> _factoryThunk;
public void SetControllerFactory(IControllerFactory controllerFactory) {
_factoryThunk =() => controllerFactory;
}
爲什麼不能只是直接分配的ControllerFactory ?,即分配:
private IControllerFactory _factory;
public void SetControllerFactory(IControllerFactory controllerFactory) {
_factory = controllerFactory;
}
public void SetControllerFactory(Type controllerFactoryType) {
_factory = (IControllerFactory)Activator.CreateInstance(controllerFactoryType);
}
問題是爲什麼他們需要懶惰的實例?第二種方法可以是_factory =(IControllerFactory)Activator.CreateInstance(controllerFactoryType);我已經更新了這個問題,以便更清楚 – JontyMC 2010-10-05 10:30:41
@JontyMC,你說得對,我錯過了那個細微差別。在詳細瞭解源代碼之後,我相信設計的解釋是允許IControllerFactory的實現者爲其實例化的特定控制器維護狀態。即設計導致Controller的實例與其IControllerFactory的實例之間的1-1映射。這樣,IControllerFactory的實現可以掛在它實例化的字段中的Controller實例上供以後使用。 (不知道爲什麼你會想要雖然) – 2010-10-05 14:51:36