МОК для регистрации репозиториев на уровне обслуживания и служб на уровне представления - PullRequest
3 голосов
/ 05 января 2010

Я использую Structuremap для регистрации службы в контроллере, и мне нужно также зарегистрировать репозитории в службах. Как я это сделаю, поскольку они представляют собой 2 разных проекта и требуют одинаковую регистрацию в МОК. На самом деле я использую его на уровне представления и внедряю сервисы в контроллер. Мне нужно знать хороший практический способ сделать с тем же контейнером IOC инъекцию в оба проекта.

Ответы [ 2 ]

5 голосов
/ 05 января 2010

Поместите контейнер IOC и любые реализации общих служб в третий проект (библиотеку классов), на который ссылаются оба других.

0 голосов
/ 07 января 2010

Я стараюсь вести реестр StructureMap для каждого из моих проектов, чтобы они могли обрабатывать свои собственные настройки. Мой основной проект добавляет ссылки на каждую из его зависимостей. В моем основном у меня обычно есть класс начальной загрузки, который отвечает за создание и настройку контейнера. (Я избегаю статической ObjectFactory, когда это возможно.)

    public class ApplicationBootstraper
{
    public IContainer Container { get; set; }

    public ApplicationBootstraper()
    {
        Container = new Container(x=>
        {
            x.AddRegistry<SettingsRegistry>();
            x.AddRegistry<ProjectRegistry>();

            //more registries go here or application specific configuration.
        });
    }
}

Относительно того, чтобы проект зависел от другого проекта, осведомленного о StructureMap. В версии 2.5.4 добавлена ​​возможность включения другого реестра в текущий реестр.

Например, у меня есть «Общий» проект, от которого я должен зависеть. Я могу сделать следующее:

    public class ProjectRegistry : Registry
{
    public ProjectRegistry()
    {
        IncludeRegistry<CommonsRegistry>();

        Scan(scan =>
        {
            scan.TheCallingAssembly();
            scan.WithDefaultConventions();
        });
    }
}

Надеюсь, это поможет.

...