I'm trying to Inject a dependency into a controller which inherits from Umbraco's RenderMvcController and getting the error
No registration for type RenderMvcController could be found and an implicit registration could not be made. For the container to be able to create RenderMvcController it should have only one public constructor: it has 3. See https://simpleinjector.org/one-constructor for more information.
Below is my code to wire up the DI
var container = new Container();
container.Options.DefaultScopedLifestyle = new WebRequestLifestyle();
InitializeContainer(container);
container.RegisterMvcControllers(Assembly.GetExecutingAssembly());
container.Verify();
DependencyResolver.SetResolver(new SimpleInjectorDependencyResolver(container));
private static void InitializeContainer(Container container)
{
container.Register<ICacheProvider, CacheProvider>(Lifestyle.Transient);
container.Register<ICacheService, CacheService>(Lifestyle.Transient);
}
This is an example of a class receiving the dependency, it inherits from a base class I wrote
public class NewsroomController : BaseRenderMvcController
{
public NewsroomController(ICacheService cacheService) : base(cacheService) { }
The base class extends RenderMvcController which is an Umbraco Controller
public class BaseRenderMvcController : RenderMvcController
{
public ICacheService CacheService { get; set; }
public BaseRenderMvcController(ICacheService cacheService)
{
CacheService = cacheService;
}
}
As you can see the base Umbraco controller does in fact have 3 different constructors
public class RenderMvcController : UmbracoController, IRenderMvcController, IRenderController, IController
{
public RenderMvcController();
public RenderMvcController(UmbracoContext umbracoContext);
public RenderMvcController(UmbracoContext umbracoContext, UmbracoHelper umbracoHelper);
I'm not sure how to get SimpleInjector to place nicely with this controller inherited from Umbraco.
Thanks in advance!
RenderMvcControlleris a base class and is not intended to be called directly by the user, as inhttp://mysite/rendermvc? Who defined thisRenderMvcController? You or is it part of another library (such as Umbraco itself)? - StevenRenderMvcControlleris defined in an Umbraco assembly, because in that case that controller would not have been registered in the container, since you are simply callingRegisterMvcControllers(Assembly.GetExecutingAssembly()), which simply means that only controllers that are defined in your MVC project are registered. Can you find out in what assembly thatRenderMvcControllerlives and what causes it to get registered? - Stevenpackages\UmbracoCms.Core.7.4.1\lib\umbraco.dllThat's what I get when I try to inspect RenderMvcController. The entire CMS is installed right inside of my main MVC project though. - Brooklyn Web Developers