최근에 처음으로 IoC 컨테이너를 사용하기 시작했으나이를 사용하는 모범 사례에 대한 교육을받지 못했습니다. 더 구체적으로 나는 과 함께 왔기 때문에 C# .NET 프로젝트에서 Unity을 사용하고 있으며, 사용하기 시작했다.일반적인 IoC 컨테이너 사용 - 데이터를 줄 아래로 전달
컨테이너를 사용하여 "최상위 수준"개체를 해결하고 컨테이너를 기반으로 주입 된 올바른 개체를 가져옵니다. 그러나 어린이와 어린이가있는 객체가있을 때 명확하게 모범 사례를 볼 수 없으며 IoC 컨테이너의 모든 데이터가 중간에 있어야하지만 중간에 있어야합니다. 일반적으로 IoC 컨테이너를 어떻게 구성할까요?
처음에는 최상위 레벨의 컨테이너에서 필요한 데이터를 추출하고이 데이터를 전달하는 대신 컨테이너를 전달하는 것이 좋다고 생각합니다. 그런데 주입 된 인터페이스 외에도 다른 특정 데이터를 가져 오는 객체에 도달하면 문제가 발생하며 객체를 확인한 후에 속성 또는 init 메소드를 통해 주입하지 않는 것이 좋습니다.
나는 이것이 충분히 명확했으면 좋겠지 만 허구의 (그리고 약간 어리석은) 예를 보자.
class Employee
{
private ICommands _commands;
priate List<Customer> _customers = new List<Customer>();
public Employee(ICommands commands)
{
_commands = commands;
}
public void AddCustomer(string customerName)
{
var customer = new Customer(customerName, _commands);
_customers.Add(customer);
}
}
class Customer
{
private string _name;
private ICommands _commands;
priate List<Case> _cases = new List<Case>();
public Customer(string, name, ICommands commands)
{
_name = name;
_commands = commands;
}
public void AddCase()
{
var case = new Case(_commands);
_cases.Add(case);
}
}
class Case {
private ICommands _commands;
public Customer(ICommands commands)
{
_commands = commands;
}
public void TriggerCommands()
{
_command.TriggerSomething();
}
}
그래서이 예제는별로 의미가 없지만 본질은 내가해야 할 것과 동일합니다. 일부는 내 ViewModel 클래스를 통해 줄을 전달하는 응용 프로그램 명령이 있는데, 그 중 일부는 명령을 표시하여 뭔가를 표시 할 수 있어야하기 때문입니다. 나는 또한 공통 저장 공간을 가지고 있는데, 이는 몇몇 클래스들에 필요할 수도 있지만 현재는 통과되어 중간 클래스들에 저장된다. 명령 만 사용하면 명령이나 컨테이너를 저장할 때 큰 문제는 없지만 일반적인 IoC 사용법에서는 IoC 컨테이너를 대신 사용하여 개체를 줄 아래로 확인할 때 사용합니까? 고객 이름과 같은 특정 데이터는 어떻게됩니까? Resolve()에서이 값을 전달할 수 없으므로 이후에 주입해야합니다.
죄송합니다 - 이것은 내가 만들 수있는만큼 짧았습니다. 같은 길이의 답변을 요구하지 않습니다 ;-) .. 그냥; IoC 컨테이너에서 이와 같은 작업을 수행하는 가장 좋은 방법은 무엇입니까?
감사합니다. 나는 이것이 도움이된다고 생각한다. 이것이 가장 좋은 방법으로 간주됩니까? 이것은 어쨌든 그것을 사용하지 않을 클래스를 통해 아무 것도 전달할 필요가 없다는 것을 의미합니다. 이것은 좋은 것입니다 ..! – stiank81
이와 같은 정적 클래스 솔루션을 시도합니다. 당신의 도움을 주셔서 감사합니다! – stiank81
도와 주시겠습니까?) –