나는 이와 비슷한 코드를 가지고 있습니다. ResolveAll
을 시도 할 때 IParserType
으로 등록 된 모든 유형이 컨테이너 인스턴스에서 생성 될 것으로 예상했습니다. 하지만 Unity
에서 인스턴스를 얻지 못했습니다. 내가 여기서 가정하거나 뭔가 잘못하고있는 것일까 요?ResolveAll not working
public class ResolveAllDemo
{
public ResolveAllDemo()
{
var container = new UnityContainer();
container.RegisterInstance<IUnityContainer>(container);
container.RegisterType<IParser, SuperParser>();
container.RegisterType<IParser, DefaultParser>();
container.RegisterType<IParser, BasicParser>();
// container.RegisterType<Crawler>();
container.RegisterType<IParserFactory, UnityParserFactory>();
foreach (var registeredMember in container.ResolveAll<IParser>())
{
LoggingUtility.LogerInstance.Logger.Write(registeredMember);
}
}
#region Resolve Demo
public interface IParserFactory
{
IEnumerable<IParser> BuildParsers();
}
public class UnityParserFactory : IParserFactory
{
private IUnityContainer _container;
public UnityParserFactory(IUnityContainer container)
{
_container = container;
}
public IEnumerable<IParser> BuildParsers()
{
return _container.ResolveAll<IParser>();
}
}
public class DefaultParser : IParser
{
public override string ToString()
{
return "DefaultParser";
}
}
public class BasicParser : IParser
{
public override string ToString()
{
return "BasicParser";
}
}
public class SuperParser : IParser
{
public override string ToString()
{
return "SuperParser";
}
}
public interface IParser
{
}
#endregion Resolve Demo
}
기본값이 반환되지 않는다는 사실은 의도적으로 설계된 것이거나 버그입니까? –
@ NicolasIrisarri 적어도 v1.2 이후로 코드베이스에 있다는 사실 외에도, 설계 상으로 생각됩니다. 기본 매핑을 이름 (예 : '기본')으로 다시 등록하면 쉽게 해결할 수 있습니다. –
이것은 정말 중요한 정보입니다. 이 방식으로 행동하는 통념은 의미가 없습니다. – vip32