ich eine Abhängigkeit in einen Controller zu injizieren bin versucht, die von Umbraco der RenderMvcController erbt und bekommen die FehlerMit
„Keine Anmeldung für Typ RenderMvcController gefunden werden konnte und eine implizite Registrierung konnte nicht hergestellt werden Damit der Container RenderMvcController erstellen kann, sollte er nur einen öffentlichen Konstruktor haben: 3. Weitere Informationen finden Sie unter https://simpleinjector.org/one-constructor.
Unten ist mein Code, um das 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);
}
Dies ist ein Beispiel einer Klasse empfängt die Abhängigkeit zu verdrahten, sie von einer Basisklasse erbt ich
public class NewsroomController : BaseRenderMvcController
{
public NewsroomController(ICacheService cacheService) : base(cacheService) { }
Die Basisklasse schrieb erweitert RenderMvcController ist ein Umbraco Controller
public class BaseRenderMvcController : RenderMvcController
{
public ICacheService CacheService { get; set; }
public BaseRenderMvcController(ICacheService cacheService)
{
CacheService = cacheService;
}
}
Wie Sie die Basis Umbraco contro sehen können ller ist in der Tat hat 3 verschiedene Konstrukteure
public class RenderMvcController : UmbracoController, IRenderMvcController, IRenderController, IController
{
public RenderMvcController();
public RenderMvcController(UmbracoContext umbracoContext);
public RenderMvcController(UmbracoContext umbracoContext, UmbracoHelper umbracoHelper);
Ich bin nicht sicher, wie SimpleInjector zu bekommen schön geerbt mit diesem Controller platzieren von Umbraco.
Vielen Dank im Voraus!
Also ist 'RenderMvcController' eine Basisklasse und soll nicht direkt vom Benutzer aufgerufen werden, wie in' http: // mysite/rendermvc'? Wer hat diesen 'RenderMvcController' definiert? Sie oder ist es Teil einer anderen Bibliothek (wie Umbraco selbst)? – Steven
Ja, der RenderMvcController ist ein Controller, den Umbraco selbst bereitstellt, von dem er geerbt wird. –
Deshalb habe ich BaseRenderMvcController gemacht, nur damit ich eine Basis haben kann, die ich kontrollieren kann, aber meine Basis muss immer noch von RenderMvcController erben, um Umbraco glücklich zu machen. –