Внедрить общие параметры с помощью структурной карты 2.6 - PullRequest
2 голосов
/ 02 июня 2010

Мне нужно внедрить универсальные репозитории (IRepository) в конструкторы моих классов, но я не знаю, как это сделать с новым DSL в Structuremap 2.6, кто-нибудь знает, как?

1 Ответ

4 голосов
/ 03 июня 2010

Это можно сделать с помощью одной строки кода в вашей конфигурации. Предполагая, что у вас есть это:

Объекты: - Покупатель - Заказ

И есть общая модель хранилища, подобная этой:

  • Репозиторий: IRepository

И есть сервисы приложений, которые выглядят так:

public AppService(IRepository<Customer> custRepo, IRepository<Order> orderRepo)

У вас было бы что-то вроде этого. Обратите внимание на использование сканера для подключения ваших пользовательских репозиториев.

public class SmRegistry : Registry
    {
        public SmRegistry()
        {
            For(typeof (IRepository<>))
                .Use(typeof (Repository<>));

            //using this will find any custom repos, like CustomerRepository : Repository<Customer>
            //Scan(scanner =>
            //         {
            //             scanner.TheCallingAssembly();
            //             scanner.ConnectImplementationsToTypesClosing(typeof (IRepository<>));

            //         });
        }
    }

Предполагая, что ваши хранилища определены в какой-то другой сборке из вашего приложения, вы можете использовать реестры, чтобы связать все это вместе. Проверьте это сообщение:

http://blog.coreycoogan.com/2010/05/24/using-structuremap-to-configure-applications-and-components/

...