私はこのようなコードを持っています。 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