2015-01-13 6 views
0

Привет Я просто смотрел на AutoFac и после их получения стартером учебникAutoFac Регистрация спутанность

http://autofac.readthedocs.org/en/latest/getting-started/index.html

последовав его и понять, как их службы работают, я хотел, чтобы попытаться создать новую реализацию на тот же тип интерфейса

builder.RegisterType<TodayWriter>().As<IDateWriter>(); 
builder.RegisterType<TomorrowWriter>().As<IDateWriter>(); 

Оба implentations содержат один и тот же код

public class TomorrowWriter : IDateWriter 
{ 
    private IOutput _output; 

    public TomorrowWriter(IOutput output) 
    { 
     this._output = output; 
    } 

    public void WriteDate() 
    { 
     this._output.Write(DateTime.Today.AddDays(1).ToShortDateString()); 
    } 
} 

Так TodaysWriter одно и то же независимо от метода WriteDate отображаются

this._output.Write(DateTime.Today.ToShortDateString()); 

вместо этого.

Так что теперь с помощью приложения, как определить, что реализация использовать как оба метода называются WriteDate()

 using(var scope = Container.BeginLifetimeScope()) 
     { 
      var writer = scope.Resolve<IDateWriter>(); 

      // Is this using todaysWriter or TomorrowWriter? 
      writer.WriteDate(); 
     } 

Могу ли я использовать это неправильно?

Благодаря

ответ

1

Для различения разных реализаций одного и того же интерфейса смотреть на named and keyed services в документации.

В качестве альтернативы вы можете свернуть свой собственный, зарегистрировав DateWriterFactory и имея метод для этого, чтобы получить конкретную реализацию IDateWriter. что-то вроде:

public class DateWriterFactory 
{ 
    IDateWriter GetWriter(string writerName) 
    { 
     if (writername=="TodayWriter") 
      return new TodayWriter(); 
     if (writername=="TomorrowWriter") 
      return new TomorrowWriter(); 
    } 
} 

Очевидно, реализация фабрики может быть сложной или простой, как вам нужно. Или вы могли бы просто иметь методы для получения фиксированных писателей, а не для передачи в строке.

+0

Спасибо, просто хотел убедиться, что мое понимание было ясным, если другие разделы касаются того, что я спросил, я счастлив. – user3428422

Смежные вопросы