我有一個代碼,看起來像這樣。當試圖執行ResolveAll
時,我預計使用IParserType
註冊的每種類型都從容器實例中刪除。但是我沒有從Unity
得到任何實例。我在這裏假設或做錯了嗎?解決所有不工作
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
}
您是否知道默認不返回的事實是設計還是錯誤? – 2015-03-12 14:00:26
@NicolasIrisarri除了它至少在v1.2以來的代碼庫的事實,我相信這是設計。如果您再次使用名稱(例如「default」)註冊默認映射,則可以輕鬆解決該問題。 – 2015-03-12 15:43:23
這確實是有價值的信息。這種方式的行爲沒有任何意義 – vip32 2016-12-13 16:15:59