Structuremap 2.6.1 загрузчик - PullRequest
2 голосов
/ 28 июля 2010

Я использую StructureMap 2.6.1
Это код из Bootstrapper.cs:

ObjectFactory.Initialize(x => x.For<IFoo>().Use<Foo>());

Когда я запускаю приложение, я получаю следующее исключение:

Экземпляр по умолчанию не определен для PluginFamily IFoo, Version = 1.0.0.0, Культура = нейтральная, PublicKeyToken = ноль

Я не получаю исключения, когда использую этот устаревший код:

ForRequestedType<IFoo>()
                .TheDefault.Is.OfConcreteType<Foo>();

Может кто-нибудь сказать мне последний синтаксис для инициализатора ObjectFactory?
Спасибо.

1 Ответ

3 голосов
/ 28 июля 2010

Каждый раз, когда вы вызываете Initialize, вы сбрасываете ObjectFactory.Т.е. в следующем сценарии:

ObjectFactory.Initialize(x => x.For<IFoo>().Use<Foo>());
ObjectFactory.Initialize(x => x.For<IBaz>().Use<Baz>());

Вы на самом деле только сопоставили IBaz на Baz.

Вместо этого следует использовать ApplicationRegistry:

public class ApplicationRegistry : Registry
{
    public ApplicationRegistry()
    {
        For<IFoo>().Use<Foo>();
        For<IBaz>().Use<Baz>();
    }
}

И используйте это в вашем методе Initialize:

ObjectFactory.Initialize(x => x.AddRegistry(new ApplicationRegistry()));
...