DRYIOC无参数控制器

时间:2018-04-15 05:21:46

标签: asp.net-mvc dependency-injection dryioc

我使用MVC设置dryIoc,因为它是一个mvc应用程序,但我最近刚刚为项目添加了一个API控制器。当我调用API控制器时出错。 MVC控制器工作正常

  

尝试创建“xxxController”类型的控制器时发生错误。确保控制器具有无参数的公共构造函数。“

2 个答案:

答案 0 :(得分:0)

此错误不是来自DryIoc,而是来自ASP.NET,后者尝试在DryIoc失败后实例化控制器。

要查找DryIoc失败的原因,请将可选参数添加到container.WithMvc()方法(如果您使用的是DryIoc.Mvc扩展名):

var mvcContainer = container.WithMvc(
    throwIfUnresolved: type => true); // throws DryIoc exc. for any unresolved type

希望实际的异常有助于修复问题。

答案 1 :(得分:0)

这是我发现的。 在我的StartUp.cs中,我有以下代码

public partial class Startup
{
    public void Configuration(IAppBuilder app)
    {

            var config = new HttpConfiguration();

            IContainer container = new Container(rules => rules.WithTrackingDisposableTransients());

            RegisterServices(container);

            container = container.WithMvc();

            ConfigureAuth(app);
    }

    public static void RegisterServices(IRegistrator registrator)
    {

        registrator.Register(typeof(IxxxRepository), typeof(xxxRepository), Reuse.Singleton);

    }
}

在我的WebApiConfig.cs

            var c = new Container()
            .WithWebApi(config, throwIfUnresolved: type => type.IsController());
        c.Register(typeof(IxxxRepository), typeof(xxxRepository), Reuse.Singleton);

两个控制器(MVC和API)现在都正常工作。但我不确定这是否正确。因为现在我需要为两个容器的每个实例注册存储库。