لا يمكن إضافة وحدات تحكم إلى Castle.windsor في ASP.NET MVC

StackOverflow https://stackoverflow.com/questions/4404261

  •  25-09-2019
  •  | 
  •  

سؤال

بالنظر إلى الإعداد التالي ، لدي ثلاث مجموعات.

الويب (ASP.NET MVC 3.0 RC1)

عارضات ازياء

الثبات (Nhibernate بطلاقة ، Castle.Windsor)

هذا هو جهاز التحكم الخاص بي.

using System;
using System.Web.Mvc;

using Castle;
using Castle.Windsor;

using Castle.MicroKernel;
using Castle.MicroKernel.SubSystems;
using Castle.MicroKernel.Registration;
using Castle.MicroKernel.SubSystems.Configuration;

namespace Persistence.Installers
{
    public class ControllerInstaller : IWindsorInstaller
    {
        public void Install(IWindsorContainer container, IConfigurationStore store)
        {
            container.Register(
            AllTypes
                .FromAssembly(System.Reflection.Assembly.GetExecutingAssembly())
                .BasedOn<IController>()
                .Configure(c => c.Named(
                    c.Implementation.Name.ToLowerInvariant()).LifeStyle.Transient));
        }
    }
}

هذا هو جهاز التحكم الخاص بي ...

    using System;
    using System.Web;
    using System.Web.Mvc;

    namespace Persistence.Containers
    {
        /// <summary>
        /// Utilize Castle.Windsor to provide Dependency Injection for the Controller Factory
        /// </summary>
        public class WindsorControllerFactory : DefaultControllerFactory
        {
            private readonly Castle.Windsor.IWindsorContainer container;

            public WindsorControllerFactory()
            {
                container = WindsorContainerFactory.Current();
            }

            protected override IController GetControllerInstance(System.Web.Routing.RequestContext requestContext, Type controllerType)
            {
                return (IController)container.Resolve(controllerType);
            }
        }
    }

هذا هو بلدي Application_Start في ال global.asax ملف..

    protected void Application_Start()
    {
        AreaRegistration.RegisterAllAreas();

        RegisterGlobalFilters(GlobalFilters.Filters);
        RegisterRoutes(RouteTable.Routes);

        // Register the Windsor Container
        ControllerBuilder.Current
            .SetControllerFactory(typeof(Persistence.Containers.WindsorControllerFactory));
    }

أحصل على الخطأ

لم يتم العثور على أي مكون لدعم Project.web.controllers.homecontroller

في ال GetControllerInstance.

لذا ، لست متأكدًا حقًا مما أقوم به خطأ ، ولماذا لا يمكنني تسجيل وحدات التحكم.

هل كانت مفيدة؟

المحلول

رمز إعداد Castle Windsor الخاص بك ينتمي إلى مشروع الويب الخاص بك. لا علاقة له بالمثابرة.

هذا يسبب المشكلة لأنك ControllerInstaller تحاول تسجيل وحدات التحكم في مجموعة الثبات بدلاً من مجموعة الويب مع الكود التالي:

System.Reflection.Assembly.GetExecutingAssembly().

لذا ، انقل رمز IOC إلى مشروع الويب وسيجد وحدات التحكم الخاصة بك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top