相关疑难解决方法(0)

将Ninject与Asp.NET Web API Beta ApiController一起使用

我被卡住了.我正在使用这里概述的wcf web api p6 Ninject与WCF Web API Preview 5一起使用的方法,但是测试版中的mvc实现有些不同.这里有一篇很好的文章http://www.asp.net/web-api/overview/extensibility/using-the-web-api-dependency-resolver讨论构建自己的自定义依赖项解析器,但是我想使用我用于我的mvc视图控制器的相同实现...例如Ninject.我在文章中也尝试了一些基于IoC Unity示例的内容,但还没有任何内容消失.任何帮助我指向正确方向的人都会非常感激.我也会继续自己挖掘.提前致谢!

这就是我在的地方.我正在使用WebActivator来引导代码,但我已经把它放到了Application_Start()中,只是为了更多的东西.

    protected void Application_Start()
    {
        var kernel = new StandardKernel(new MyNinjectModule());
        GlobalConfiguration.Configuration.ServiceResolver.SetResolver(new NinjectDependencyResolver(kernel));
    }
Run Code Online (Sandbox Code Playgroud)

和我收到以下错误:
类型Ninject.Web.Mvc.NinjectDependencyResolver似乎不执行Microsoft.Practices.ServiceLocation.IServiceLocator.
参数名称:commonServiceLocator

找到解决方案
也许有/将会有一个更优雅的方式,但现在这对我有用.我也在这里添加我的自定义消息处理程序.

[assembly: WebActivator.PreApplicationStartMethod(typeof(MyApp.AppStart.ApiBootstrapper), "Start")]
namespace MyApp.AppStart
{
    public class ApiBootstrapper
    {
        public static void Start()
        {
            var kernel = new StandardKernel(new MyNinjectModule());
            var resolver = new NinjectDependencyResolver(kernel);
            GlobalConfiguration.Configuration.ServiceResolver.SetResolver(resolver.GetService, resolver.GetServices);
            GlobalConfiguration.Configuration.MessageHandlers.Add(new ApiAuthHandler());
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc ninject asp.net-web-api

11
推荐指数
1
解决办法
5649
查看次数

使用新的WCF Web API设置Ninject

所以我一直在玩最新版本的WCF Web API,并决定用它来实现Ninject.

基于我读过的内容,我需要实现IResourceFactory接口,该接口需要以下方法:

    public object GetInstance(System.Type serviceType, 
                              System.ServiceModel.InstanceContext instanceContext,
                              System.Net.Http.HttpRequestMessage request);

    public void ReleaseInstance(System.ServiceModel.InstanceContext instanceContext,
                                object service);
Run Code Online (Sandbox Code Playgroud)

所以我把鸡抓了下面:

public class NinjectResourceFactory : IResourceFactory
{
    private readonly IKernel _kernel;

    public NinjectResourceFactory()
    {
        var modules = new INinjectModule[]
                          {
                              new ServiceDIModule(),    //Service Layer Module
                              new RepositoryDIModule(), //Repo Layer Module
                              new DataServiceDIModule()
                          };

        _kernel = new StandardKernel(modules);
    }

    #region IResourceFactory Members

    public object GetInstance(Type serviceType,
                              InstanceContext instanceContext,
                              HttpRequestMessage request)
    {
        return Resolve(serviceType);
    }

    public void ReleaseInstance(InstanceContext instanceContext, object service)
    { …
Run Code Online (Sandbox Code Playgroud)

.net c# ninject ioc-container wcf-web-api

7
推荐指数
1
解决办法
896
查看次数

带有Ninject的WebAPI

我遇到了麻烦,制作了Ninject和WebAPI.All合作.我将更加具体:
首先,我玩了WebApi.All包,看起来它对我来说很好.
第二,我加入RegisterRoutesGlobal.asax下一行:

routes.Add(new ServiceRoute("api/contacts", new HttpServiceHostFactory(), typeof(ContactsApi)));
Run Code Online (Sandbox Code Playgroud)

所以最终的结果是:


public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

    routes.Add(new ServiceRoute("api/contacts", new HttpServiceHostFactory(), typeof(ContactsApi)));

        routes.MapRoute(
            "Default", // Route name
            "{controller}/{action}/{id}", // URL with parameters
            new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
        );

    ControllerBuilder.Current.SetControllerFactory(new NinjectControllerFactory());

}
Run Code Online (Sandbox Code Playgroud)

一切似乎都很好,但是当我试图将用户重定向到特定的操作时,例如:

return RedirectToAction("Index", "Home");
Run Code Online (Sandbox Code Playgroud)

localhost:789/api/contacts?action=Index&controller=Home 是不好的.我划了一条线RegisterRoute,现在它看起来像:


public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            routes.MapRoute(
                "Default", // Route name
                "{controller}/{action}/{id}", // URL with parameters
                new …
Run Code Online (Sandbox Code Playgroud)

c# ninject .net-4.0 asp.net-mvc-3

7
推荐指数
1
解决办法
2861
查看次数