问题标签 [controller-factory]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
176 浏览

vb.net - 自定义控制器工厂找不到出口

它正在寻找的 controllerName 是正确的名称,并且我知道容器中包含具有匹配名称的导出。由于某种原因,它没有找到它。我正在尝试从我放在项目中指定文件夹中的 dll 导入。它总是会尝试返回默认控制器,但找不到 dll 控制器,因为它不在主项目目录中。我知道 controllerFactory 找到了 DLL,但没有正确读取它。

这是我的 CreateController 函数:

如果您需要任何澄清,请告诉我!谢谢!

编辑:返回 Me.defaultControllerFactory.CreateController(requestContext, controllerName) 上的错误消息是 HttpException 未被用户代码处理。找不到控制器路径“CUContractNumberPlugin/ChangeCUNumber”或未实现 IController。

这是它正在谈论的控制器。

当我将部分视图加载到我的主视图中时,它会被调用。部分观点是这样的:

0 投票
1 回答
2412 浏览

asp.net-mvc-3 - 带有 autofac 的自定义 ControllerFactory

首先,我是asp mvc的新手,所以请耐心等待。

目前我想创建项目,其中 autofac 将是 IoC 容器,我将要求自定义控制器工厂。在自定义控制器工厂中,我想通过控制器的构造函数设置实现数据存储库。

我认为应该以这种方式完成:

我的控制器工厂代码:

控制器映射为空。当我想解决 IController 时收到错误,因为 IController 不是 reqseter,但我在 autofac builder 中使用了 RegisterControllers。

你能解释一下如何以正确的方式做到这一点吗?

0 投票
1 回答
322 浏览

asp.net-mvc-4 - 每个请求中的每个控制器都会调用 IControllerFactory.CreateController

我遇到了一个问题,虽然不是很严重,但仍然引起了我的注意。我碰巧有一个 MVC4 Web 应用程序,我已经将默认控制器工厂替换为我自己实现的一个,在这个工厂中,我使用 unity 为控制器注入构造函数参数。

我不明白的是,为什么对于我提出的每一个请求,都会为应用程序中的每个控制器调用 CreateController 方法,而不仅仅是 url 中的控制器和部分视图调用的控制器。

这种行为正常吗?是否有必要或有办法防止它?我认为没有任何理由,我的研究也没有让我得到任何好的答案。

谢谢!

0 投票
1 回答
739 浏览

asp.net-mvc-3 - 带有 IoC 的 MVC3:基本控制器中的参数过多。有什么选择吗?

我正在使用 MVC 3。假设我有一个基本控制器和几个派生控制器。我正在使用 IoC,我的基本控制器构造函数如下所示:

到现在为止还挺好?也许。但是,我的每个派生控制器都需要定义一个与基类构造函数签名匹配的构造函数,例如:

这就是我的问题,因为我必须在所有派生控制器中维护“详细”构造函数。如果我需要添加一个新的提供者,我必须重构我所有的派生控制器。

我想我会创建一个 ServiceProvider(或 Service Locator?)类(和 IServiceProvider 接口),它将有一个构造函数和所有提供者作为参数(IoC 将在其中完成它的工作)并将它们作为属性公开。然后我的基本构造函数和派生构造函数将只有 IServiceProvider 作为参数。

但是我担心这种方法会产生一些负面影响,例如: 1- 隐藏实现:除非我检查实现,否则我不知道我使用或需要哪个提供程序。2-难以测试:当构造函数包含参数时,我可以轻松测试它并且我知道会发生什么(自动记录)。

有没有人有任何建议或意见?

0 投票
1 回答
725 浏览

asp.net-mvc-4 - 可以在 MVC4 中实现 ControllerFactory 和 IHttpControllerActivator 以进行依赖注入吗?

我已经实现了 Mvc 控制器的 ControllerFactory 和 WebApi 控制器的 IHttpControllerActivator,如下所示:

但是当我发送对 WebApi 的请求时,它会引发异常,因为 ControllerFactory 正在尝试解决它。例外情况是:“未找到路径 '/SiteName/Account' 的控制器或未实现 IController。”

我已经尝试将它作为带有(查询字符串)参数和不带参数的“Get”,但结果是一样的。

是否可以在同一个项目中实现两者?

0 投票
2 回答
375 浏览

asp.net-mvc - 处置在自定义控制器工厂中创建的存储库的正确位置是什么?

在我的 ASP.NET MVC 项目中,我使用了一个自定义控制器工厂,它实例化一个基于实体框架的数据存储库并将其传递给控制器​​的构造函数。存储库对象实现了 IDisposable,但我应该在哪里调用它的 Dispose 方法?想到的最直接的方法是覆盖控制器的 Dispose 方法并在那里执行,但是由于存储库被注入到控制器中而不是在那里创建,因此在控制器中处理它对我来说似乎不太合适。

0 投票
1 回答
1346 浏览

c# - 发生控制器冲突时,自定义 ControllerFactory 不会替换 DefaultControllerFactory

我有一个自定义控制器工厂(与我的问题相关的非常基本的实现):

这是global.asax这样注册的:

当解析控制器没有冲突时(例如在解析过程中只找到一个控制器),在这个控制器工厂中设置的断点被正确命中。但是,当我有两个具有相同名称的控制器(在我的情况下:一个在一个区域中,一个不在一个区域中)而不在路由中使用命名空间约束时,我的控制器不会被命中,并且DefaultControllerFactory接管并抛出一个(预期)异常。


我的问题

我注册MyControllerFactory正确吗?在我上面概述的情况下,是否还有其他原因没有使用它?


我正在尝试做的事情

我正在尝试编写一个ControllerFactory自动使用在(配置指定)区域中定义的控制器(即,如果发生冲突,如上所述,使用区域控制器而不是非区域控制器)。如果该区域不包含匹配的控制器,请退回到不在该区域中的控制器。

0 投票
1 回答
7804 浏览

javafx-2 - JavaFX 自定义控制器工厂

我一直在尝试使用自定义实现FXMLLoader的方法。setControllerFactoryCallback<P,R>

ORACLE 文档说明如下:

一个实现可能会返回一个空值来表明它没有或不能创建给定类型的控制器;在这种情况下,加载程序将使用默认的控制器构造机制。

我想要实现的结果是我可以使用依赖注入框架来创建任何需要参数的控制器,但我会让FXMLLoader加载任何不需要参数的控制器。

因此,如果我有以下使用ViewController不接受参数的类的简单 FXML 文件...

在这种情况下,我使用以下简单的控制器工厂实现向我发出信号FXMLLoader,我希望它管理控制器的构造......

在调用该load()方法后,我的ViewController类中的 Initialise 方法永远不会被调用(我已经用断点验证了这一点)。

如果我更改我的控制器工厂实现以返回ViewController该类的实例,那么一切都会按预期工作。

谁能帮我解决我的困惑?是我错误地使用了Callback界面还是 ORACLE 文档不正确?

0 投票
1 回答
480 浏览

c# - 如何在 Orchard 中设置自定义控制器工厂?

那些更熟悉 Orchard CMS 的人可以帮我解决问题吗?我正在编写一个 Orchard 模块,并且我的控制器具有构造函数参数(服务接口)。

我在 Orchard 的什么地方设置了一个自定义控制器工厂来处理这个问题(不干扰用户安装的其他 Orchard 模块)

是在 Global.asax 中完成的吗?我已经找到

在 OrchardStarter.cs 中,所以我对设置任何其他控制器工厂的位置感到困惑。

它只是使用 Autofac DI 完成的吗?如果是这样,如果有人有一个简短的代码示例,那就太好了!(我是 Autofac 和 Orchard 的新手)

谢谢

0 投票
2 回答
2343 浏览

routes - 如何让 Web API / Castle Windsor 识别控制器?

我发现为什么在这里调用占位符“Home Controller”

我在 RouteConfig.cs 中注释掉了对 HomeController 的引用,并添加了一个我希望它调用的控制器:

...但这在 WindsorControllerFactory 中给了我一个空值:

...即使 GetCountOfDepartmentRecords() 确实存在于 DepartmentsController 中:

那么,就设置或配置而言,我缺少什么或... ???

注意:我还尝试了没有“控制器”措辞的 RouteConfig 条目:

……但这没什么区别。

更新

这就是我在 WindsorDependencyResolver 中所拥有的:

...难道我做错了什么?

更新 2

也许我的项目中有太多实现 IWindsorInstaller 的类?

&& ||,相关地,我调用 container.Register() 太多次/在太多地方?

我在三个地方接到了对 container.Register() 的调用:

0)WindsorDependencyResolver.cs:

1)SomethingProviderInstaller.cs:

2) 存储库安装程序

这是“好事多磨”吗?

更新 3

我的看法是:

...应该注册所有实现 ApiController 接口的东西;因此,应该安装 DepartmentsController。

(所有其他控制器也应如此,因为它们都实现了 ApiController 接口)。

虽然这个:

...只会注册实现 ISomethingProvider 的单个类。

最后是这个:

container.Register( Types.FromThisAssembly() .Where(type => type.Name.EndsWith("Controllers")) .WithService.DefaultInterfaces() .Configure(c => c.LifestylePerWebRequest()));

...将注册所有名为 Controller 的东西。

注意:我替换了:

...与上面的内容(存储库)。

我在它们中都设置了断点,它们在被击中后都被击中,与上面显示的顺序相反。所以我不知道是否只允许一次调用 container.Register(),或者为什么我得到一个空控制器......

更新 4

根据 Summit Dishpanhands 的示例我注释掉了我在 RepositoriesInstaller 中的代码并将其替换为:

......在Mudville仍然没有快乐,虽然......

更新 5

在此处使用 Summit 的代码 [使用 Castle Windsor 在 WebAPI 中的依赖注入,我将 Global.asax.cs 中的代码从:

...对此:

......我似乎已经走得更远了。现在,我得到了一个浏览时异常,而不是运行时异常,即 HTTP 错误 403.14 - 禁止:

在此处输入图像描述

我真的需要搞乱国际空间站,还是有其他东西可以解决这个难题?

更新 6

回应基兰查拉:

当我像这样将其更改为 MapHttpRoute 时:

...我得到编译时错误“ 'System.Web.Routing.RouteCollection'不包含'MapHttpRoute'的定义并且没有扩展方法'MapHttpRoute'接受'System.Web.Routing.RouteCollection类型的第一个参数'可以找到...... '

更新 7

谢谢你的帮助,基兰。

我确实有一个 WebApiConfig.cs,它实际上已经拥有了所有这些:

...所以我想我应该把 RouteConfig.cs 中的东西注释掉;看来我的文件太多了;就好像我的壁橱里塞满了易燃物。

更新 8

对于亚当康纳利:

“我假设你的意思是 controllerType 为空。”

是的。

“您目前有以下内容:

var controllerFactory = new WindsorControllerFactory(container.Kernel); ControllerBuilder.Current.SetControllerFactory(controllerFactory); 你也需要做这样的事情(或者如果你的项目只使用 WebApi):

GlobalConfiguration.Configuration.Services.Replace(typeof (IHttpControllerActivator), new WindsorControllerActivator(container));"

事实上,我确实有他们两个:

...但我目前没有调用 BootstrapContainer(),所以也没有调用。取而代之的是:

更新 9

Serdar,似乎很有帮助,尤其是 ServiceInstaller : IWindsorInstaller 方法。

现在,我看到 IRepository 的生活方式 (LifestyleTransient) 与其他人 (LifestylePerWebRequest) 不同。

IRepository 是我应该参考的东西(我没有,它是无法解析的),还是你的自定义接口,例如所有其余的似乎都是(IUserService、IAppService 等)?