Регистрация общего класса в StructureMap с помощью конструктора - PullRequest
0 голосов
/ 28 февраля 2011

Я хочу зарегистрировать мой универсальный класс с его конструктором. Как это:

        ObjectFactory.Initialize(
            action =>
            {
                action.SelectConstructor<IRepository<>>(() => new Repository<>(LifetimeManager.Current));
            });

Но я не знаю, как я могу это сделать?

Примечание: LifetimeManager.Current является статической собственностью. Если меня не волнует конструктор, я могу написать это, action.For(typeof(IRepository<>)).Use(typeof(Repository<>)); Но сегодня мне нужно передать параметр класса репозитория UnitOfWork через DI.

Спасибо.

1 Ответ

1 голос
/ 28 февраля 2011

Я думаю, что это будет работать для вас:

action => action.For<IUnitOfWork>().Use(() => LifetimeManager.Current));
action => action.For(typeof (IRepository<>)).Use(typeof (Repository<>)));

Это при условии, что конструктор репозитория имеет параметр IUnitOfWork. Просто убедитесь, что все параметры конструктора класса Repository зарегистрированы в контейнере, и вам будет хорошо идти.

Если у вас нет нескольких конструкторов в классе Repository, и вы хотите выбрать конкретный, не нужно использовать метод SelectConstructor.

...