Warum .net MVC-Quellcode ControllerBuilder einen Delegaten verwenden, um die Controller Factory ?:MVC-Quellcode Singletonmuster
private Func<IControllerFactory> _factoryThunk;
public void SetControllerFactory(IControllerFactory controllerFactory) {
_factoryThunk =() => controllerFactory;
}
Warum kann sie nicht nur die Controller direkt zuweisen zuweisen ?, das heißt:
private IControllerFactory _factory;
public void SetControllerFactory(IControllerFactory controllerFactory) {
_factory = controllerFactory;
}
public void SetControllerFactory(Type controllerFactoryType) {
_factory = (IControllerFactory)Activator.CreateInstance(controllerFactoryType);
}
Die Frage ist, warum brauchen sie die faule Instanziierung? Die zweite Methode könnte _factory = (IControllerFactory) Activator.CreateInstance (controllerFactoryType) sein; Ich habe die Frage aktualisiert, um klarer zu sein – JontyMC
@JontyMC, du hast absolut Recht, ich habe diese Nuance vorher verpasst. Nachdem ich den Quellcode ein wenig genauer untersucht habe, glaube ich, dass die Erklärung für das Design darin besteht, dass es den Implementern von IControllerFactory ermöglicht wird, den Zustand für einen spezifischen Controller, den sie instanziiert, beizubehalten. Das Design führt zu einer 1-1-Zuordnung zwischen Instanzen eines Controllers und Instanzen ihrer IControllerFactory. Auf diese Weise könnte die Implementierung von IControllerFactory beispielsweise an der Instanz des Controllers hängen, die in einem Feld zur späteren Verwendung instanziiert wird. (Ich bin mir nicht sicher, warum du das willst) –