gpt4 book ai didi

c# - ResolveAll 不工作

转载 作者:IT王子 更新时间:2023-10-29 04:22:52 28 4
gpt4 key购买 nike

我有一个看起来像这样的代码。当尝试执行 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
}

最佳答案

您没有注册 IParser 的 3 种不同实现。您创建一个默认映射 IParser -> SuperParser 然后用 IParser 覆盖它 -> DefaultParser 然后你覆盖再次使用 IParser -> BasicParser

如果你想注册所有这三个,你必须提供像

这样的命名注册
container.RegisterType<IParser, SuperParser>("Super");
container.RegisterType<IParser, DefaultParser>("Default");
container.RegisterType<IParser, BasicParser>("Basic");

此外 ResolveAll 不包括默认映射(没有名称的那个)。它只解析那些注册为命名映射的 IParser 映射。

关于c# - ResolveAll 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9124629/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com