Проблема
У меня есть несколько конкретных универсальных классов с двумя аргументами типа, которые реализуют общий интерфейс с одним аргументом типа. Например:
public interface ISomeService<T>
{
// ...
}
public class SomeService<TA, TB> : ISomeService<TA>
{
// ...
}
Регистрирую их с помощью Autofac вот так:
var containerBuilder = new ContainerBuilder();
containerBuilder.RegisterGeneric(typeof(SomeService<,>))
.As(typeof(ISomeService<>))
.InstancePerLifetimeScope();
var container = containerBuilder.Build();
При попытке разрешить экземпляр ISomeService<Foo>
следующим образом:
var service = container.Resolve<ISomeService<Foo>>();
Я получаю Autofac.Core.Registration.ComponentNotRegisteredException
исключение о том, что запрошенная служба ISomeService`1[[Foo]]
не зарегистрирована.
Вопросы
- То, что я пытаюсь сделать, невозможно с помощью Autofac?
- Если да, то есть ли обходной путь?
- Если нет, предлагают ли другие контейнеры DI такую возможность, например SimpleInjector?
typeof(Bar)
выше). Еще раз спасибо за ваши мысли и идеи. Кстати, Simple Injector действительно впечатляет! 10.10.2016