현재 내가 Unity를 사용하는 동안 작은 유틸리티를 작성 중이므로이 문제를 해결할 수 있다면 다른 IoC 컨테이너로 변경할 수 있습니다.변경 불가능한 클래스 및 화합 응용 프로그램 블록
내가 만들 때 일부 데이터를 제공하는 클래스를 만들려하지만, 그 이후 불변, 일반적으로 내가 함께 할 것입니다 : 생성자에서 SomeHashingClass에 대한 종속성이
class SomeItem
{
public SomeItem(string name)
{
Name = name;
Hash = new SomeHashingClass().GenerateHash(name);
}
public string Name { get; private set; }
public string Hash { get; private set; }
}
문제입니다 , 개체를 불변으로 유지하는 동안 어떻게 삽입합니까?
한 가지 방법은 생성자에 의존성을 적용한 다음 현재 생성자와 동일한 메소드를 사용하여 실제 작업을 수행하는 것입니다. 그러나 개체가 기존의 상태로 남을 수는 있지만 완전히 무효라는 생각은 싫다. 그리고 메서드를 한 번만 호출 할 수 있도록 코드를 작성해야합니다.
class SomeItemFactory
{
IHashingClass _hashingClass;
public SomeItemFactory(IHashingClass hashingClass)
{
_hashingClass = hashingClass;
}
public SomeItem Create(string name)
{
return new SomeItem(_hashingClass, name);
}
}
class SomeItem
{
public SomeItem(IHashingClass hashingClass, string name)
{
Name = name;
Hash = hashingClass.GenerateHash(name);
}
public string Name { get; private set; }
public string Hash { get; private set; }
}
하십시오 : 나는 통일이 수동 SomeItem에 대한 의존성 주입을하고, 해결하는 것이 그것이 'SomeItemFactory'클래스를 만드는 것입니다해야 볼 수있는 다른 방법은, 그러나 이것은 코드의 양을 두 배로
이것을 할 수있는 깨끗한 방법이 있다고 말해주세요. 왜 같은 방법이 없습니다 :unityContainer.Resolve<SomeItem>("the items name");