10

We decided to create a "homemade" DD4T template to have the Tridion API & an ASP.NET MVC 4 website (the current template contains contains an ASP.NET MVC 3 website)

I added /lib & /config folders inside the /bin folder with .jar & .xml files required (license included)

My projects are named Test.Web.DD4T & Test.Web.UI

Here is the source code producing the error :

(From PageController which inherits from TridionControllerBase) :

public override ActionResult Page(string pageId){
return base.Page(pageId);}

Here is the stack trace :

    [ConfigurationException: No PageFactory configured]
   DD4T.Mvc.Controllers.TridionControllerBase.GetModelForPage(String PageId) +225
   DD4T.Mvc.Controllers.TridionControllerBase.Page(String pageId) +89
   *.Web.DD4T.PageController.Page(String pageId) in C:\Users\$\My Projects\*.Web\*.Web.DD4T\PageController.cs:9
   lambda_method(Closure , ControllerBase , Object[] ) +163
   System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters) +17
   System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters) +205
   System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters) +27
   System.Web.Mvc.Async.<>c__DisplayClass42.<BeginInvokeSynchronousActionMethod>b__41() +28
   System.Web.Mvc.Async.<>c__DisplayClass8`1.<BeginSynchronous>b__7(IAsyncResult _) +12
   System.Web.Mvc.Async.WrappedAsyncResult`1.End() +57
   System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethod(IAsyncResult asyncResult) +50
   System.Web.Mvc.Async.<>c__DisplayClass39.<BeginInvokeActionMethodWithFilters>b__33() +58
   System.Web.Mvc.Async.<>c__DisplayClass4f.<InvokeActionMethodFilterAsynchronously>b__49() +237
   System.Web.Mvc.Async.<>c__DisplayClass37.<BeginInvokeActionMethodWithFilters>b__36(IAsyncResult asyncResult) +12
   System.Web.Mvc.Async.WrappedAsyncResult`1.End() +57
   System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethodWithFilters(IAsyncResult asyncResult) +50
   System.Web.Mvc.Async.<>c__DisplayClass2a.<BeginInvokeAction>b__20() +24
   System.Web.Mvc.Async.<>c__DisplayClass25.<BeginInvokeAction>b__22(IAsyncResult asyncResult) +126
   System.Web.Mvc.Async.WrappedAsyncResult`1.End() +57
   System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeAction(IAsyncResult asyncResult) +45
   System.Web.Mvc.<>c__DisplayClass1d.<BeginExecuteCore>b__18(IAsyncResult asyncResult) +14
   System.Web.Mvc.Async.<>c__DisplayClass4.<MakeVoidDelegate>b__3(IAsyncResult ar) +25
   System.Web.Mvc.Async.WrappedAsyncResult`1.End() +62
   System.Web.Mvc.Controller.EndExecuteCore(IAsyncResult asyncResult) +61
   System.Web.Mvc.Async.<>c__DisplayClass4.<MakeVoidDelegate>b__3(IAsyncResult ar) +25
   System.Web.Mvc.Async.WrappedAsyncResult`1.End() +62
   System.Web.Mvc.Controller.EndExecute(IAsyncResult asyncResult) +49
   System.Web.Mvc.Controller.System.Web.Mvc.Async.IAsyncController.EndExecute(IAsyncResult asyncResult) +10
   System.Web.Mvc.<>c__DisplayClass8.<BeginProcessRequest>b__3(IAsyncResult asyncResult) +28
   System.Web.Mvc.Async.<>c__DisplayClass4.<MakeVoidDelegate>b__3(IAsyncResult ar) +25
   System.Web.Mvc.Async.WrappedAsyncResult`1.End() +62
   System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult) +49
   System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult result) +9
   System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +8968077
   System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +184

The web.config (unity part) :

<unity>
<typeAliases>
  <!-- Lifetime manager types -->
  <typeAlias alias="singleton" type="Microsoft.Practices.Unity.ContainerControlledLifetimeManager,                      Microsoft.Practices.Unity" />
  <typeAlias alias="external" type="Microsoft.Practices.Unity.ExternallyControlledLifetimeManager,                      Microsoft.Practices.Unity" />
  <!-- define aliases for interfaces -->
  <typeAlias alias="IPageProvider" type="DD4T.ContentModel.Contracts.Providers.IPageProvider, DD4T.ContentModel.Contracts" />
  <typeAlias alias="IComponentProvider" type="DD4T.ContentModel.Contracts.Providers.IComponentProvider, DD4T.ContentModel.Contracts" />
  <typeAlias alias="IBinaryProvider" type="DD4T.ContentModel.Contracts.Providers.IBinaryProvider, DD4T.ContentModel.Contracts" />
  <typeAlias alias="ILinkProvider" type="DD4T.ContentModel.Contracts.Providers.ILinkProvider, DD4T.ContentModel.Contracts" />
  <typeAlias alias="ITaxonomyProvider" type="DD4T.ContentModel.Contracts.Providers.ITaxonomyProvider, DD4T.ContentModel.Contracts" />
  <typeAlias alias="IComponentPresentationRenderer" type="DD4T.Mvc.Html.IComponentPresentationRenderer, DD4T.Mvc" />
  <typeAlias alias="IPageController" type="DD4T.Mvc.Controllers.IPageController, DD4T.Mvc" />
  <typeAlias alias="IComponentController" type="DD4T.Mvc.Controllers.IComponentController, DD4T.Mvc" />
  <typeAlias alias="IPageFactory" type="DD4T.ContentModel.Factories.IPageFactory, DD4T.ContentModel.Contracts" />
  <typeAlias alias="IComponentFactory" type="DD4T.ContentModel.Factories.IComponentFactory, DD4T.ContentModel.Contracts" />
  <typeAlias alias="ILinkFactory" type="DD4T.ContentModel.Factories.ILinkFactory, DD4T.ContentModel.Contracts" />
  <!-- 
    Define aliases for implementations 
    This is where we determine which classes to use for our implementations!
  -->
  <typeAlias alias="PageProvider" type="DD4T.Providers.SDLTridion2011sp1.TridionPageProvider, DD4T.Providers.SDLTridion2011sp1" />
  <typeAlias alias="ComponentProvider" type="DD4T.Providers.SDLTridion2011sp1.TridionComponentProvider, DD4T.Providers.SDLTridion2011sp1" />
  <typeAlias alias="BinaryProvider" type="DD4T.Providers.SDLTridion2011sp1.TridionBinaryProvider, DD4T.Providers.SDLTridion2011sp1" />
  <typeAlias alias="LinkProvider" type="DD4T.Providers.SDLTridion2011sp1.TridionLinkProvider, DD4T.Providers.SDLTridion2011sp1" />
  <typeAlias alias="TaxonomyProvider" type="DD4T.Providers.SDLTridion2011sp1.TridionTaxonomyProvider, DD4T.Providers.SDLTridion2011sp1" />
  <typeAlias alias="ComponentPresentationRenderer" type="DD4T.Mvc.Html.DefaultComponentPresentationRenderer, DD4T.Mvc" />
  <typeAlias alias="PageController" type="Test.Web.DD4T.PageController, Test.Web.DD4T" />
  <typeAlias alias="ComponentController" type="Test.Web.DD4T.ComponentController, Test.Web.DD4T" />
  <typeAlias alias="PageFactory" type="DD4T.Factories.PageFactory, DD4T.Factories" />
  <typeAlias alias="ComponentFactory" type="DD4T.Factories.ComponentFactory, DD4T.Factories" />
  <typeAlias alias="LinkFactory" type="DD4T.Factories.LinkFactory, DD4T.Factories" />
</typeAliases>
<!-- Unity Configuration -->
<containers>
  <container name="main">
    <types>
      <!-- map the implementations to the interfaces -->
      <type type="IPageProvider" mapTo="PageProvider">
        <!--          <lifetime type="singleton" /> -->
        <property name="PublicationId" type="int" value="0" />
      </type>
      <type type="IPageFactory" mapTo="PageFactory">
        <property name="PageProvider" dependencyType="IPageProvider" />
        <property name="ComponentFactory" dependencyType="IComponentFactory" />
        <property name="LinkFactory" dependencyType="ILinkFactory" />
      </type>
      <type type="ILinkProvider" mapTo="LinkProvider" />
      <type type="ILinkFactory" mapTo="LinkFactory">
        <property name="LinkProvider" dependencyType="ILinkProvider" />
      </type>
      <type type="IPageController" mapTo="PageController">
        <property name="PageFactory" dependencyType="IPageFactory" />
        <property name="ComponentPresentationRenderer" dependencyType="IComponentPresentationRenderer" />
      </type>
      <type type="IComponentProvider" mapTo="ComponentProvider">
        <lifetime type="singleton" />
      </type>
      <type type="IComponentFactory" mapTo="ComponentFactory">
        <lifetime type="singleton" />
        <property name="ComponentProvider" dependencyType="IComponentProvider" />
      </type>
      <type type="IComponentController" mapTo="ComponentController">
        <property name="ComponentFactory" dependencyType="IComponentFactory" />
      </type>
      <type type="IComponentPresentationRenderer" mapTo="ComponentPresentationRenderer">
        <lifetime type="singleton" />
      </type>
    </types>
  </container>
</containers>

Do you have any idea to solve it ?

3 Answers 3

9

Make sure you also have the Tridion DLLs including the Tridion.ContentDelivery.* DLLs in your BIN folder.

7

It sounds like you haven't set up the dependency resolver properly.

Have a look at my post here for how to do it with Ninject: http://blog.building-blocks.com/using-ninject-with-dd4t

Alternatively look at the DD4T example solution for the same in Unity.

5

Can you provide a bit more detail about how you've set up your .net solution to handle pages and components?

Robert's answer mentions

'Alternatively look at the DD4T example solution for the same in Unity'

  • There's a sample website showing the configuration of the page controller (using unity) at the following url:

https://code.google.com/p/dynamic-delivery-4-tridion/source/browse/trunk/dotnet/Example/Sample.Web/Sample.Web.Site.Corporate/Web.config?r=169

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.