シンプルインジェクタと依存性注入を使用する正しい方法が何かを理解しようとしています。シンプルインジェクタをベースクラスで使用する
私は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);
そして
public BaseController(ILogger _logger)
{
logger = _logger;
}
BaseController
にコンストラクタを追加し、すべてのコントローラのコンストラクタの例の後に: base(_logger)
を追加します。
public TestController(ISubController _SubController, ILogger _logger) : base(_logger)
をしかし、これが正しいですこれを行う方法、またはこれを行うための "正しい"方法がありますか?
ドキュメントを読む必要があります。それはすべての情報を圧倒しているかもしれませんが、私が読んだ最高のドキュメントの一つです。 –