Asp.net mvc Unity mvc4和webapi是同一个应用程序

Asp.net mvc Unity mvc4和webapi是同一个应用程序,asp.net-mvc,inversion-of-control,unity-container,asp.net-web-api,Asp.net Mvc,Inversion Of Control,Unity Container,Asp.net Web Api,大家好,我的环境是MVC4RC wepapi和microsoft.practices.unity v2.0 我想在mvc控制器(继承自System.web.mvc.Controller)和webapi控制器(继承自System.web.http.ApicController)中使用IoC/DI。问题是我不能同时工作,如果有人能帮我,我会粘贴一些代码 在global.asax.cs中 public class MvcApplication : System.Web.HttpApplicat

大家好,我的环境是MVC4RC wepapi和microsoft.practices.unity v2.0

我想在mvc控制器(继承自System.web.mvc.Controller)和webapi控制器(继承自System.web.http.ApicController)中使用IoC/DI。问题是我不能同时工作,如果有人能帮我,我会粘贴一些代码

在global.asax.cs中

    public class MvcApplication : System.Web.HttpApplication
{

    private static IUnityContainer container;

    protected void Application_Start()
    {
        ....

        InitializeDependencyInjectionContainer(GlobalConfiguration.Configuration);
    }



    private static void InitializeDependencyInjectionContainer(HttpConfiguration config)
    {
        container = new UnityContainer();


        container.RegisterType<Site.Web.Data.IDatabaseFactory, Site.Web.Data.DatabaseFactory>();
        container.RegisterType<Site.Web.Data.Interfaces.IUnitOfWork, Site.Web.Data.UnitOfWork>();
        container.RegisterType<Site.Web.Data.Interfaces.IUserRepository, Site.Web.Data.Repositories.UserRepository>();
        container.RegisterType<Site.Web.Data.Interfaces.ISiteRepository, Site.Web.Data.Repositories.SiteRepository>();
        container.RegisterType<Site.Web.Data.Interfaces.IInformationRepository, Site.Web.Data.Repositories.InformationRepository>();

        container.RegisterType<IUserServices, UserServices>();
        container.RegisterType<ISiteServices, SiteServices>();
        container.RegisterType<IInformationServices, InformationServices>();
        container.RegisterType<IFormsAuthenticationService, FormsAuthenticationService>();
        container.RegisterType<IMembershipService, MembershipService>();
        //config.DependencyResolver = new Site.Web.IoC.IoCContainer(container);
        DependencyResolver.SetResolver(new Site.Web.IoC.IoCContainer(container));
        //DependencyResolver.SetResolver(new Site.Web.IoC.UnityDependencyResolver(container));

    }
}
_authorized controller是我用来获取所需的所有用户和站点信息的控制器:

    public class _AuthorizedController : Controller
{

    protected readonly Site.Web.Domain.Services.IUserServices _userServices;
    public _AuthorizedController(Site.Web.Domain.Services.IUserServices userServices)
    {
        if (userServices == null) throw new ArgumentNullException("userServices");
        this._userServices = userServices;

    }

    ...
}
和一个webapi控制器:

    public class SiteController : _AuthorizedController
{

        ISiteServices _siteServices;

    public SiteController(Site.Web.Domain.Services.IUserServices userServices,
                            Site.Web.Domain.Services.ISiteServices siteServices)
        : base(userServices)
    {
        this._siteServices = siteServices;
    }

    ....
}
    public class InformationController : _AuthorizedApiController
{

    private ISiteServices _siteServices;
    private IUserServices _userServices;

    public InformationController(Site.Web.Domain.Services.IUserServices userServices,
                            Site.Web.Domain.Services.ISiteServices siteServices)
    : base(userServices)
    {
        this._siteServices = siteServices;
        this._userServices = userServices;
    }
    public class _AuthorizedApiController : ApiController
{

        protected readonly Site.Web.Domain.Services.IUserServices _userServices;

        public _AuthorizedApiController(Site.Web.Domain.Services.IUserServices userServices)
        {
            if (userServices == null) throw new ArgumentNullException("userServices");
            this._userServices = userServices;

        }

    .....
}
。。。。 }

以及我为保留继承链而创建的_AuthorizedApiController(ApiController):

这个结构适用于mvc控制器,但我无法在ApicController上运行。我会试图改变国际奥委会,但没有运气

我总是有一个非常明显的错误“Site.Web.webapi.InformationController”没有默认构造函数


根据Tx3注释,是否有任何帮助

webapi的DependencyResolver没有实现,所以您需要它

nuget Unity.WebAPI已经安装好了,但“不幸的是”您需要安装nuget Unity.Mvc3(与MVC4Rc配合使用效果很好)


所有流程都在:

不是特定于统一的,但请查看Haack先生在标题下的解决方案:两个依赖解析程序@

这是否相关?谢谢,我标记了这个解决方案,因为来自Tx3的评论符合决议。
    public class _AuthorizedApiController : ApiController
{

        protected readonly Site.Web.Domain.Services.IUserServices _userServices;

        public _AuthorizedApiController(Site.Web.Domain.Services.IUserServices userServices)
        {
            if (userServices == null) throw new ArgumentNullException("userServices");
            this._userServices = userServices;

        }

    .....
}