我想弄清楚什麼是使用簡單的噴油器和依賴注入的正確方法。使用簡單的噴油器與基類
我有MasterController
和很少的控制器在那工作。所以基本上我試圖實現MasterController
,我可以從其他課程或可能從我的用戶界面使用。
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.
}
然後,我有我的IMainController
,ISubController
,TestController
和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() { }
}
我的想法是,我有幾個控制器和他們使用一些常見的東西從BaseController
public class BaseController
{
public string Name { get; set; }
// here is some code.
}
但BaseController
我想使用ILogger也。我如何以正確的方式做到這一點?
現在我已經添加BaseController到容器。
_container.Register<BaseController>(Lifestyle.Transient);
,然後添加構造函數BaseController
public BaseController(ILogger _logger)
{
logger = _logger;
}
然後添加
: base(_logger)
所有的控制器構造函數實例後:
public TestController(ISubController _SubController, ILogger _logger) : base(_logger)
但是,這是正確的這樣做的方式還是會有一個更「正確」的方式來做到這一點?
您應該閱讀文檔。它可能壓倒所有的信息,但它是我讀過的最好的文檔之一,它包含了所有信息。 –