У меня проблемы с пониманием того, как использовать RegisterFactory. Приведенный ниже код прекрасно работает со старым InjectionFactory, но у меня возникают проблемы, когда я пытаюсь сделать то же самое с RegisterFactory.
В примере кода есть раздел без комментариев, в котором используется RegisterFactory, и раздел с комментариями, в котором используется InjectionFactory,Код InjectionFactory работает нормально, но RegisterFactory создает исключение ResolutionFailedException. Unity.ResolutionFailedException: 'Текущий тип, ConsoleApp1.IFoo, является интерфейсом и не может быть создан. Вам не хватает отображения типов?
Что я делаю неправильно?
class Program
{
static void Main(string[] args)
{
var container = new UnityContainer();
container.EnableDebugDiagnostic();
container.RegisterType<IFoo, Foo1>("Foo1");
container.RegisterType<IFoo, Foo2>("Foo2");
container.RegisterType<MainViewModel>();
// This does not work
container.RegisterFactory<Func<string, IFoo>>((c, type, name) => c.Resolve<IFoo>(name));
// This works
//container.RegisterType<Func<string, IFoo>>(new InjectionFactory(
// ctx => new Func<string, IFoo>(name => container.Resolve<IFoo>(name))));
var vm = container.Resolve<MainViewModel>();
}
}
public class MainViewModel
{
public MainViewModel(Func<string, IFoo> fooFactory)
{
var foo1 = fooFactory.Invoke("Foo1");
var foo2 = fooFactory.Invoke("Foo2");
}
}
public interface IFoo
{
string Name { get; }
}
public class Foo1 : IFoo
{
public string Name { get; set; }
public Foo1()
{
Name = "Foo1";
}
}
public class Foo2 : IFoo
{
public string Name { get; set; }
public Foo2()
{
Name = "Foo2";
}
}