Как я могу подключить Unity к использованию заводского метода во время разрешения? - PullRequest
0 голосов
/ 28 августа 2018

Я изучаю веревки Единства, и у меня проблемы с настройкой так, как я хочу.

Я установил MVCE, чтобы проиллюстрировать это:

A Customer имеет имя.

 public interface ICustomer
    {
        string name { get; set; }
    }
    public class Customer : ICustomer
    {
        public string name { get; set; }
        public Customer(string name)
        {
            this.name = name;
        }
    }

Чтобы построить Customer, была создана Фабрика:

public interface ICustomerFactory
{
    ICustomer Create(string name);
}

public class CustomerFactory
    :ICustomerFactory
{
    public ICustomer Create(string name)
    {
        return new Customer(name);
    }
}

Основная программа

static void Main(string[] args)
{
    const string customerName = "foo";

    var container = new UnityContainer();
    container.RegisterType<ICustomerFactory, CustomerFactory>();

    container.Resolve<ICustomer> //I would like this to return a customer named "foo".
}

Как бы я хотел, чтобы это работало:

  • Когда Unity пытается разрешить ICustomer, он использует фабрику, связанную с ним, ICustomerFactory -> Вот где я борюсь.
  • ICustomerFactory затем преобразуется в его конкретную реализацию, CustomerFactory, и вызывается Create(customerName).

Без Unity это было бы что-то вроде:

ICustomerFactory factory = new CustomerFactory();
ICustomer customer = factory.Create(customerName);

Я просматривал документацию по Unity, но это очень трудно понять, и у меня проблемы с прогрессом.

1 Ответ

0 голосов
/ 29 августа 2018

Разрешите фабрику и создайте своего клиента.

var factory = container.Resolve<ICustomer>();
var customer = factory.Create(customerName);

Внедрение зависимостей - это все о , а не о новых вещах ...

Два дополнительных комментария:

  • если вам абсолютно не нужно, избегайте непосредственного использования контейнера. Вместо того, чтобы вводить контейнер и вызывать решимость, чтобы получить фабрику, лучше сначала ввести фабрику.
  • Лично мне нравится использовать интерфейсы, если я не уверен на 100%, что они мне не понадобятся. Они предоставляются практически бесплатно, но делают тестирование и расширение намного проще. Скорее всего, единственное, что не будет связано, это DTO.
...