IoC Castle Windsor-没有为此对象定义无参数的构造函数

斯科特·怀特

当使用Castle Windsor通过(DI / IoC)模式相应地注册控制器及其依赖项时,我在控制器上得到了“为此对象定义的无参数构造函数”。有人可以看看以下内容并看到我的错误,因为我看不到它。

在此处输入图片说明

在global.asax上注册的代码

public class MyApplication : System.Web.HttpApplication
{ 
    public MvcApplication()
    {
        this.container = new WindsorContainer().Install(new DependencyInstaller());
    }
    protected void Application_Start()
    {
        AreaRegistration.RegisterAllAreas();

        WebApiConfig.Register(GlobalConfiguration.Configuration);
        FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
        RouteConfig.RegisterRoutes(RouteTable.Routes);
        BundleConfig.RegisterBundles(BundleTable.Bundles);
        GlobalConfiguration.Configuration.Services.Replace(typeof(IHttpControllerActivator),
        new WindsorActivator(this.container));
    }
}

我的DI

public class DependencyInstaller : IWindsorInstaller
{
    public void Install(IWindsorContainer container, IConfigurationStore store)
    {
        container.Register(
            Component.For<IDatabaseFactory>().ImplementedBy<DatabaseFactory>().LifeStyle.PerWebRequest,
            Component.For<IUnitOfWork>().ImplementedBy<UnitOfWork>().LifeStyle.PerWebRequest,
            Component.For<IMappingEngine>().ImplementedBy<MappingEngine>().UsingFactoryMethod(() => Mapper.Engine).LifeStyle.Singleton,
            Component.For<IFirmTasks>().ImplementedBy<FirmTasks>().LifeStyle.PerWebRequest,
            Classes.FromAssemblyContaining<PersonController>().BasedOn<IController>().LifestyleTransient(),
            Classes.FromThisAssembly().BasedOn<IHttpController>().LifestyleTransient(),
            Classes.FromAssemblyNamed("Core.Firm.Tasks").Where(type => type.Name.EndsWith("Tasks")).WithServiceAllInterfaces().LifestylePerWebRequest(),
            Classes.FromAssemblyNamed("Core.Firm.Repository")
                .Where(type => type.Name.EndsWith("Repository")).WithServiceAllInterfaces().LifestylePerWebRequest()
            );
    }
}

我的控制器

public class PersonController : Controller
{
    private IFirmTasks tasks;

    public PersonController(IFirmTasks tasks)
    {
        this.tasks = tasks;
    }

当我加载应用程序时,容器加载良好,所有依赖项都根据调试时的屏幕快照解决了。

在此处输入图片说明

任何人都知道我失败的地方。提前致谢。

伊利亚·帕金(Ilya Palkin)

当我加载应用程序时,容器加载良好,所有依赖项都根据调试时的屏幕快照解决了。

是的,您所有的类型都已注册。

如果用编写var controller = container.Resolve<PersonController>();Global.asax则应获取控制器的实例。

您的实现对Asp.Net WebApi有效,并且System.Web.Http.ApiController适用于

您的代码无法正常工作,因为您PersonController继承System.Web.Mvc.ControllerSystem.Web.Mvc.DefaultControllerFactory使用了您的代码您可以在第一张图片中看到它。

您应该编写并注入自定义ControllerFactoryGlobal.asax以便创建Asp.Net MVC控制器。

    //Set the controller builder to use our custom controller factory
    var controllerFactory = new WindsorControllerFactory(container);
    ControllerBuilder.Current.SetControllerFactory(controllerFactory);

您可以在关于另一个SO问题的此答案中阅读更多内容

这是的默认实现WindsorControllerFactory

/// <summary>
/// Controller factory the class is to be used to eliminate hard-coded dependencies 
/// between controllers and other components
/// </summary>
public class ControllerFactory : DefaultControllerFactory
{
    private readonly IWindsorContainer container;

    public WindsorControllerFactory(IWindsorContainer container)
    {
        this.container = container;
    }

    public override void ReleaseController(IController controller)
    {
        container.Release(controller.GetType());
    }

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

IoC Castle Windsor-没有为此对象定义无参数的构造函数

来自分类Dev

Castle.Windsor IoC容器特定配置

来自分类Dev

Castle Windsor IoC-具有Singleton / Transient引用的内存泄漏

来自分类Dev

具有构造函数参数的Castle Windsor安装程序

来自分类Dev

使用Castle Windsor将具有不同实现的列表的对象作为构造函数参数进行解析

来自分类Dev

WPF ViewModel中的Castle Windsor构造函数注入

来自分类Dev

由于已将EF5 SignalR和Windsor Castle作为IoC处置了DbContext,因此无法完成该操作

来自分类Dev

使用 Castle Windsor 在服务类的构造函数中使用参数化构造函数初始化类

来自分类Dev

Castle.Windsor可以使用类型和名称来选择构造函数吗?

来自分类Dev

如何在Castle-Windsor的xml配置中配置通用类型参数?

来自分类Dev

在允许自定义组件的同时注册默认的Castle Windsor组件

来自分类Dev

XML配置中的Castle Windsor服务覆盖

来自分类Dev

WCF & Castle Windsor - Looks like you forgot

来自分类Dev

Castle Windsor re-create instance

来自分类Dev

Castle.Windsor CollectionResolver和组件订购

来自分类Dev

Castle Windsor Interceptors - 在 ctor 中获取目标

来自分类Dev

在 Castle.windsor 中注册窗体

来自分类Dev

如何指定我希望控制器的构造函数接收的类实例(使用Web API,DI和Castle Windsor时)?

来自分类Dev

autofac with signalr没有为此对象定义无参数构造函数

来自分类Dev

使用存储库获取错误没有为此对象定义无参数构造函数

来自分类Dev

MVC中的“读取动作”支架“没有为此对象定义无参数构造函数。”

来自分类Dev

Umbraco没有为此对象定义无参数构造函数

来自分类Dev

Unity:没有为此对象定义无参数构造函数。

来自分类Dev

在mvc5中没有为此对象定义无参数构造函数

来自分类Dev

没有为此对象定义无参数构造函数ASP.NET网站

来自分类Dev

autofac with signalr没有为此对象定义无参数构造函数

来自分类Dev

没有为此对象定义无参数构造函数。当我尝试Unity Dependency时

来自分类Dev

添加 Owin 后依赖注入被破坏,没有为此对象定义无参数构造函数

来自分类Dev

没有为此对象为 MVC 控制器定义无参数构造函数

Related 相关文章

  1. 1

    IoC Castle Windsor-没有为此对象定义无参数的构造函数

  2. 2

    Castle.Windsor IoC容器特定配置

  3. 3

    Castle Windsor IoC-具有Singleton / Transient引用的内存泄漏

  4. 4

    具有构造函数参数的Castle Windsor安装程序

  5. 5

    使用Castle Windsor将具有不同实现的列表的对象作为构造函数参数进行解析

  6. 6

    WPF ViewModel中的Castle Windsor构造函数注入

  7. 7

    由于已将EF5 SignalR和Windsor Castle作为IoC处置了DbContext,因此无法完成该操作

  8. 8

    使用 Castle Windsor 在服务类的构造函数中使用参数化构造函数初始化类

  9. 9

    Castle.Windsor可以使用类型和名称来选择构造函数吗?

  10. 10

    如何在Castle-Windsor的xml配置中配置通用类型参数?

  11. 11

    在允许自定义组件的同时注册默认的Castle Windsor组件

  12. 12

    XML配置中的Castle Windsor服务覆盖

  13. 13

    WCF & Castle Windsor - Looks like you forgot

  14. 14

    Castle Windsor re-create instance

  15. 15

    Castle.Windsor CollectionResolver和组件订购

  16. 16

    Castle Windsor Interceptors - 在 ctor 中获取目标

  17. 17

    在 Castle.windsor 中注册窗体

  18. 18

    如何指定我希望控制器的构造函数接收的类实例(使用Web API,DI和Castle Windsor时)?

  19. 19

    autofac with signalr没有为此对象定义无参数构造函数

  20. 20

    使用存储库获取错误没有为此对象定义无参数构造函数

  21. 21

    MVC中的“读取动作”支架“没有为此对象定义无参数构造函数。”

  22. 22

    Umbraco没有为此对象定义无参数构造函数

  23. 23

    Unity:没有为此对象定义无参数构造函数。

  24. 24

    在mvc5中没有为此对象定义无参数构造函数

  25. 25

    没有为此对象定义无参数构造函数ASP.NET网站

  26. 26

    autofac with signalr没有为此对象定义无参数构造函数

  27. 27

    没有为此对象定义无参数构造函数。当我尝试Unity Dependency时

  28. 28

    添加 Owin 后依赖注入被破坏,没有为此对象定义无参数构造函数

  29. 29

    没有为此对象为 MVC 控制器定义无参数构造函数

热门标签

归档