단순 인젝터와 종속성 인젝션을 사용하는 올바른 방법이 무엇인지 알아 내려고하고 있습니다.간단한 인젝터를 기본 클래스로 사용하기
나는 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)
을하지만이 올바른입니다이 작업을 수행하는 방법이나이 작업을 수행하는 "올바른"방법이 있습니까?
문서를 읽어야합니다. 모든 정보가 압도적 일지 모르지만 내가 읽은 최고의 문서 중 하나입니다. 모든 것이 있습니다. –