Рекомендации: вызов метода GetInstance для создания объекта - PullRequest
1 голос
/ 09 августа 2010

Давайте обсудим одну вещь: у меня есть простой интерфейс:

public interface ICar
{
    void StartEngine();
    void StopEngine();
}

public interface IRadio
{
    //doesn't matter
}

и некоторая реализация:

public class SportCar : ICar
{
  private IRadio radio;
  public SportCar(IRadio radioObj)
  {
    radio = radioObj;
  }
  //all the rest goes here    
}

также у нас есть код инициализации StructureMap, и мы вызываем его в программеинициализация:

private void InitializeStructureMap()
{
  ObjectFactory.Initialize(x=>
  {
     x.For<ICar>.Use<SportCar>();
     x.For<IRadio>.Use<CarAudioSystem>();
  });
 }

И мой вопрос: какова лучшая практика для создания SportCar?Является ли призыв:

ObjectFactory.GetInstance<ICar>() 

хорошей практикой (теперь у меня нет другого способа решить эту проблему)?

1 Ответ

3 голосов
/ 11 августа 2010

ObjectFactory.GetInstance - это ваша отправная точка, которую вы используете для разрешения первого объекта в иерархии.

Вот как я запускаю свои приложения WinForms, такая же техника должна применяться к WebForms, службам Windows и консольным приложениям:

 var main = ObjectFactory.GetInstance<Main>();
 Application.Run(main);

Для ASP.NET MVC платформа позволяет вам зарегистрировать фабрику, которая создает ваши контроллеры, но даже на этой фабрике вы бы вызвали ObjectFactory.GetInstance для создания экземпляра вашего контроллера.

В качестве примечания: Когда вы выполняете инициализацию, вам не нужно явно отображать ICar на SportCar, если у вас нет нескольких реализаций ICar, вы можете просто сделать

x.Scan(a => { a.TheCallingAssembly(); a.WithDefaultConventions(); });

, который сопоставит ваши интерфейсы с реализациями по умолчанию.

...