У меня есть контроллер, и он получает конкретный экземпляр интерфейса.
Интерфейс выглядит примерно так:
public interface IMyInterface
{
... implementation goes here
}
А потом у меня есть несколько классов, которые реализуют этот интерфейс следующим образом:
public class MyClassA : IMyInterface
{
... implementation goes here
}
public class MyClassB : IMyInterface
{
... implementation goes here
}
В моем контроллере А у меня есть следующий конструктор:
private ICustomerService customerService;
private IMyInterface myInterface;
puvlic ControllerA(ICustomerService customerService, IMyInterface myInterface)
{
this.customerService = customerService;
this.myInterface = myInterface;
}
В моем global.ascx:
protected void Application_Start()
{
// Autofac
var builder = new ContainerBuilder();
builder.RegisterControllers(Assembly.GetExecutingAssembly());
builder.RegisterType<NewsService>().As<INewsService>();
IContainer container = builder.Build();
DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
}
Я указал, что Autofac должен предоставить экземпляр ICustomerService. Как бы я указать тип экземпляра для IMyInterface? В этом случае для ControllerA я хотел бы, чтобы Autofac внедрил экземпляр ClassA. И для ControllerB я хотел бы, чтобы это внедрило ClassB. Как бы я это сделал?
ОБНОВЛЕНО 2011-02-14:
Позвольте мне рассказать вам о моей реальной жизненной ситуации. У меня есть NewsController, конструктор которого выглядит так:
public NewsController(INewsService newsService, IMapper newsMapper)
{
Check.Argument.IsNotNull(newsService, "newsService");
Check.Argument.IsNotNull(newsMapper, "newsMapper");
this.newsService = newsService;
this.newsMapper = newsMapper;
}
Интерфейс IMapper:
public interface IMapper
{
object Map(object source, Type sourceType, Type destinationType);
}
Я использую AutoMapper. Так что мой NewsMapper будет выглядеть так:
public class NewsMapper : IMapper
{
static NewsMapper()
{
Mapper.CreateMap<News, NewsEditViewData>();
Mapper.CreateMap<NewsEditViewData, News>();
}
public object Map(object source, Type sourceType, Type destinationType)
{
return Mapper.Map(source, sourceType, destinationType);
}
}
Так как бы вы порекомендовали мне сделать это сейчас?