Swa*_*nil 1 asp.net-mvc configuration controller castle-windsor global-asax
我想在Global.asax.cs中以编程方式注册控制器.使用MvcContrib.Castle.WindsorControllerFactory
private static IWindsorContainer _Container;
protected virtual void InitializeWindsor()
{
try
{
if (_Container == null)
{
_Container = new WindsorContainer();
ControllerBuilder.Current.SetControllerFactory(new MvcContrib.Castle.WindsorControllerFactory(_Container));
RegisterActiveRecord();
RegisterRepositories();
RegisterServices();
RegisterControllers();
RegisterComponents();
}
Run Code Online (Sandbox Code Playgroud)
我已经做到了
private void RegisterControllers()
{
try
{
_Container.Register(
AllTypes.Of<IController>()
.FromAssembly(typeof(HomeController).Assembly)
.Configure(c => c.LifeStyle.Transient)
);
Run Code Online (Sandbox Code Playgroud)
它适用于具有默认构造函数的所有控制器.但是,我有一个带参数化construtor的控制器(LoginController).
public class LoginController : Controller
{
private IUser _User;
public LoginController(IUser objUser)
{
_User = objUser;
}
Run Code Online (Sandbox Code Playgroud)
当我尝试在浏览器中查看它时(http:// localhost:2011/Login),它会给我以下错误.
**No parameterless constructor defined for this object**
Stack Trace:
[MissingMethodException: No parameterless constructor defined for this object.]
System.RuntimeTypeHandle.CreateInstance(RuntimeType type, Boolean publicOnly, Boolean noCheck, Boolean& canBeCached, RuntimeMethodHandleInternal& ctor, Boolean& bNeedSecurityCheck) +0
System.RuntimeType.CreateInstanceSlow(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache) +98
System.RuntimeType.CreateInstanceDefaultCtor(Boolean publicOnly, Boolean skipVisibilityChecks, Boolean skipCheckThis, Boolean fillCache) +241
System.Activator.CreateInstance(Type type, Boolean nonPublic) +69
System.Activator.CreateInstance(Type type) +6
System.Web.Mvc.DefaultControllerFactory.GetControllerInstance(RequestContext requestContext, Type controllerType) +491
[InvalidOperationException: An error occurred when trying to create a controller of type 'NAATEELib.Controllers.LoginController'. Make sure that the controller has a parameterless public constructor.]
System.Web.Mvc.DefaultControllerFactory.GetControllerInstance(RequestContext requestContext, Type controllerType) +628
System.Web.Mvc.DefaultControllerFactory.CreateController(RequestContext requestContext, String controllerName) +204
Run Code Online (Sandbox Code Playgroud)
请指导我.我不想修改.config(xml)文件.谢谢.
您似乎忘记使用Windsor控制器工厂(堆栈跟踪显示DefaultControllerFactory).
看看这个Windsor - ASP.NET MVC教程,特别是第2部分.
编辑:OP编辑问题,代码已经在使用MvcContrib的Windsor控制器工厂.注册错误(建议使用MvcContrib的RegisterControllers)或未正确安装控制器工厂.
| 归档时间: |
|
| 查看次数: |
4153 次 |
| 最近记录: |