Böyle bir şeye benzeyen bir kodum var. ResolveAll
yapmaya çalışırken, IParserType
ile kaydedilen her tür kapsayıcı örneğinden elde edilmesini bekledim. Ancak Unity
'dan herhangi bir örnek almadım. Burada yanlış bir şey mi yapıyorum?ResolveAll çalışmıyor
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
}
Varsayılanın iade edilmemesi gerçeğinin tasarımdan mı kaynaklandığı yoksa bir hata mı olduğunu biliyor musunuz? –
@NicolasIrisarri Kodbase'de en az v1.2'den beri olduğu gerçeğinden ayrı olarak, tasarım gereği olduğuna inanıyorum. Varsayılan eşleştirmeyi tekrar bir adla (ör. "Varsayılan") kaydettiğinizde, kolayca çalışabilirsiniz. –
bu gerçekten değerli bilgiler. bu şekilde davranan birlik hiç bir anlam ifade etmiyor – vip32