簡體   English   中英

溫莎城堡構造者注入

[英]Castle Windsor Constructor Injection

我一直在嘗試讓Castle Windsor將我的數據庫上下文注入我的控制器,我一直在關注Castle Windsor 網站上的教程

我的代碼如下
引導程序

internal class IOCContainerBootstrap
    {
        private static IWindsorContainer container;
        public static void Configure()
        {

            container = new WindsorContainer()
                .Install(FromAssembly.This());

            var controllerFactory = new GravityClimbingControllerFactory(container.Kernel);

            ControllerBuilder.Current.SetControllerFactory(controllerFactory);

        }

        #region IDisposable Members

        public static void Dispose()
        {
            container.Dispose();
        }

        #endregion
    }

安裝人員

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

            container.Register(Component.For<DbContext>().ImplementedBy<GravityClimbingEntities>());
        }
    }

    public class APIInstaller : IWindsorInstaller
    {
        public void Install(IWindsorContainer container, IConfigurationStore store)
        {
            container.Register(Classes
                .FromThisAssembly()
                .BasedOn<IHttpController>()
                .ConfigureFor<ApiController>(c => { c.PropertiesIgnore(pi => false); })
                .LifestyleTransient());
        }
    }

最后是我的API控制器

public class ArticalsController : ApiController
    {
        private readonly DbContext _context;
        private readonly Db.Repositories.ArticalRepository repository;
        public ArticalsController(DbContext context)
        {
            _context = context;
            repository = new Db.Repositories.ArticalRepository(context);
        }

        [HttpGet]
        public string HelloWorld()
        {
            return "Hello.world";
        }
    }

當我調試時我沒有收到任何錯誤,它說它可以解決依賴關系

調試器信息

但是當我嘗試調用API控制器時,出現以下錯誤消息

{
    "Message" : "An error has occurred.",
    "ExceptionMessage" : "Type 'ArticalsController' does not have a default constructor",
    "ExceptionType" : "System.ArgumentException"
}

我做錯了什么愚蠢的事情,看不到嗎?

對於面臨相同問題的人們,我發現了問題。

溫莎城堡不了解IHTTPControlerIHTTPControler基礎),因此我需要創建一個IHttpControllerActivator並將其附加到GlobalConfiguration.Configuration.Services

我發現此鏈接可以在此處啟用

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM