Ich versuche herauszufinden, was die richtige Methode ist, um einfache Injektion und Dependency Injection zu verwenden.Verwendung von einfachen Injektor mit Basisklassen
Ich habe MasterController
und einige Controller, die darunter arbeiten. Also im Grunde, was ich versuche, eine MasterController
archieve, die ich aus einer anderen Klassen oder vielleicht von meiner Benutzeroberfläche verwenden kann.
public class MasterController
{
public static Container _container = new Container();
ILogger logger;
public IMainController MainController;
public ISubController SubController;
public MasterController()
{
_container.Register<ILogger, DebugLogger>(Lifestyle.Singleton);
_container.Register<IMainController, TestController>(Lifestyle.Singleton);
_container.Register<ISubController, Test2Controller>(Lifestyle.Transient);
_container.Verify();
logger = _container.GetInstance<ILogger>();
MainController = _container.GetInstance<IMainController>();
}
public void RenameMainController(string _name)
{
MainController.Name = _name;
}
// more code here.
}
Dann habe ich meine IMainController
, ISubController
, TestController
und Test2Controller
.
public interface IMainController
{
string Name { get; set; }
void DoSomething();
}
public interface ISubController
{
string Name { get; set; }
void DoSomething();
void SomeExtraFunctionality();
}
public class TestController : BaseController, IMainController
{
private ILogger logger;
public List<ISubController> SubControllers = new List<ISubController>();
public TestController(ISubController _SubController, ILogger _logger)
{
logger = _logger;
SubControllers.Add(_SubController);
logger.Log("TestController ready");
}
public void DoSomething() { }
}
public class Test2Controller : BaseController, ISubController
{
private ILogger logger;
public Test2Controller(ILogger _logger)
{
logger = _logger;
logger.Log("TestController ready");
}
public void DoSomething() { }
public void SomeExtraFunctionality() { }
}
Meine Idee ist, dass ich einige Controller haben und sie verwenden einige gemeinsame Dinge von Base
public class BaseController
{
public string Name { get; set; }
// here is some code.
}
Aber in BaseController
Ich möchte auch die ILogger verwenden. Wie mache ich das richtig?
Jetzt habe ich BaseController Container hinzugefügt.
_container.Register<BaseController>(Lifestyle.Transient);
Und dann Zugabe Konstruktor Base
public BaseController(ILogger _logger)
{
logger = _logger;
}
Und fügen Sie dann den
: base(_logger)
nachdem alle Controller Konstrukteuren Beispiel:
public TestController(ISubController _SubController, ILogger _logger) : base(_logger)
Aber ist das die richtige Wie könnte man das machen oder würde es einen "richtigen" Weg geben?
Sie sollten die Dokumente lesen. Es kann überwältigend sein alle Informationen, aber es ist eine der besten Dokumentationen, die ich gelesen habe, es hat alles. –