StructureMap problem

Member since: 2010

Hi, I am having problems with structuremap again.

In Global.asax, I have an override of RegisterRoutes:

protected override void RegisterRoutes(RouteCollection routes)
        {
            base.RegisterRoutes(routes);
            ObjectFactory.BuildUp(this); // with or without this line, the next line breaks

            var contentLoader = ServiceLocator.Current.GetInstance<IContentLoader>(); // breaks here
            ....
        }

    

I have a configurable module, that gets called first (before RegisterRoutes):

    [ModuleDependency(typeof(ServiceContainerInitialization))]
    [InitializableModule]
    public class DependencyResolverInitialization : IConfigurableModule
    {
        public void ConfigureContainer(ServiceConfigurationContext context)
        {
            IContainer container = IoC.Initialize();
            DependencyResolver.SetResolver(new StructureMapDependencyResolver(container));
            GlobalConfiguration.Configuration.DependencyResolver = new StructureMapDependencyResolver(container);

            ObjectFactory.BuildUp(this);
        }
...

   I have referenced StructureMap from this location:

D:\...\trunk\src\Project.Web\packages\structuremap.2.6.4.1\lib\net40\StructureMap.dll

Now, in web.config, I am having this commented out:

      <!--<dependentAssembly>
        <assemblyIdentity name="StructureMap" publicKeyToken="e60ad81abae3c223" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-2.6.4.0" newVersion="2.6.4.0" />
      </dependentAssembly>-->

When I use ObjectFactory.WhatDoIHave();, I get the following error:

The type 'StructureMap.ObjectFactory' exists in both 'StructureMap.dll' and 'StructureMap.dll'

If I uncomment the web.config part, I get:

Missing requested Instance property "NamedIndexingService" for InstanceKey "6b1c69a3-1eba-470c-95fb-492045313561"

For the version with commented out dependentAssembly in web.config, I can comment out the problematic part of code, run the app, uncomment it and it works. I would really like a real solution instead of this tweak.

Any clues on what I'm doing wrong?

 

 

#72288 Jun 12, 2013 14:54
  • Member since: 2002

    Hi Marija!

    We need the versionredirect in order for the EPiServer core to load the correct version. Potentially you can try redirecting to a newer version given that it's backwards compatible with the old version. Removing the redirect will otherwise give you two different versions loaded in the same app domain which usually means trouble.

    #72294 Jun 12, 2013 16:47
  • Member since: 2010

    Hi, thx, but in that case I get:

    Missing requested Instance property "NamedIndexingService" for InstanceKey "1c0b201e-8c75-49d0-90ce-2c9c25305f2a"

     
    #72314 Edited, Jun 13, 2013 9:37
  • Member since: 2010

    I have figured out that the line EndsWith("Service") makes the problem with NamedIndexingService.

    ObjectFactory.Configure(x =>
                    {
                        x.Scan(s =>
                            {
                                s.Assembly("Mogul.Web.Framework");
                                s.Assembly("PROJECT.Web");
                                s.WithDefaultConventions();
                            });
    
    
                        ...
                        x.SetAllProperties(
                            policy => policy.NameMatches(name => name.EndsWith("Service")));
                        ...
                    });

    Without it, the exception doesn't occur.

    I have removed it, since it is a part of a default convension and in the module public class ContentInitializableModule : IInitializableModule that subscibes to content events, I am manually getting the instance of my service class in public void Initialize(InitializationEngine context):

    _contentService = ObjectFactory.GetInstance<IContentService>();

    #72338 Edited, Jun 13, 2013 12:38