与温莎城堡的新手,并试图创建实现我的接口

本文关键字:创建 实现 接口 我的 城堡 新手 | 更新日期: 2023-09-27 17:49:39

我已经创建了我自己的项目,但是我没有使用castle来启动我的接口实现!我已经添加了ControllersInstaller, WindsorControllerFactory类如下所示。我的控制器是下面的最后一段代码。请帮助!谢谢,詹姆斯。

public class WindsorControllerFactory : DefaultControllerFactory
{
    private readonly IKernel kernel;
    public WindsorControllerFactory(IKernel kernel)
    {
        this.kernel = kernel;
    }
    public override void ReleaseController(IController controller)
    {
        kernel.ReleaseComponent(controller);
    }
    protected override IController GetControllerInstance(RequestContext requestContext, Type controllerType)
    {
        if (controllerType == null)
        {
            throw new HttpException(404, string.Format("The controller for path '{0}' could not be found.", requestContext.HttpContext.Request.Path));
        }
        return (IController)kernel.Resolve(controllerType);
    }
}

public class ControllersInstaller : IWindsorInstaller
{
    public void Install(IWindsorContainer container, IConfigurationStore store)
    {
        container.Register(Classes.FromThisAssembly()
                        .BasedOn<IController>()
                        .LifestyleTransient());
    }
}



 public class HomeController : Controller
{
    public IMemberMapper _memberMapper;
    public HomeController()
    {
    }
    public HomeController(IMemberMapper memberMapper)
    {
        _memberMapper = memberMapper;
    }
    public ActionResult Index()
    {
        var model = _memberMapper.Map();
        return View(model);
    }
}

//全局文件

public class MvcApplication : System.Web.HttpApplication
{
    protected void Application_Start()
    {
        AreaRegistration.RegisterAllAreas();
        WebApiConfig.Register(GlobalConfiguration.Configuration);
        FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
        RouteConfig.RegisterRoutes(RouteTable.Routes);
        BundleConfig.RegisterBundles(BundleTable.Bundles);
        AuthConfig.RegisterAuth();
    }
    private static IWindsorContainer container;
    private static void BootstrapContainer()
    {
        container = new WindsorContainer()
            .Install(FromAssembly.This());
        var controllerFactory = new WindsorControllerFactory(container.Kernel);
        ControllerBuilder.Current.SetControllerFactory(controllerFactory);
    }
    protected void Application_End()
    {
        container.Dispose();
    }
}

与温莎城堡的新手,并试图创建实现我的接口

您是否已将WindsorControllerFactory注册为您当前的ControllerFactory ?

这通常在global .asax.cs中完成。如果你没有这样做,看看这个例子:https://github.com/kkozmic/ToBeSeen/blob/master/src/ToBeSeen/Global.asax.cs

更具体地说,查看BootstrapContainer()方法及其调用位置。这指示ASP。. NET MVC来尝试使用新定义的工厂创建可能需要的任何控制器。如果没有这一步,您只是在使用内置的控制器工厂。

您必须在某处注册您的IMemberMapper服务。最佳位置是另一个安装程序类。