首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >ASP.NET Web (自托管)+ Ninject -默认绑定

ASP.NET Web (自托管)+ Ninject -默认绑定
EN

Stack Overflow用户
提问于 2012-03-29 06:22:27
回答 2查看 1.6K关注 0票数 1

我正在将一个项目从WCF Web API转换为ASP.NET Web API -谢谢MS :(

自托管POC代码:

代码语言:javascript
运行
复制
    static void Main(string[] args)
    {
        var kernel = new StandardKernel();

        const string baseAddress = "http://localhost:8080";
        var config = new HttpSelfHostConfiguration(baseAddress);
        config.ServiceResolver.SetResolver(new NinjectServiceLocator(kernel));

        config.Routes.MapHttpRoute("DefaultApi", "api/{controller}/{id}", new {id = RouteParameter.Optional});

        var server = new HttpSelfHostServer(config);
        server.OpenAsync().Wait();
        Console.WriteLine("The server is running....");
        Console.ReadLine();
    }

我将Ninject注册为依赖项解析器。为此,我使用CommonServiceLocator.NinjectAdapter对其进行注册:

代码语言:javascript
运行
复制
config.ServiceResolver.SetResolver(new NinjectServiceLocator(kernel));

据我所知,这似乎是可行的,尽管使用SetResolver(object)感觉有点脏。

我现在遇到的问题是,当我尝试运行它时,有很多绑定不再注册(即IHttpContollerFactoryILogger等)。

我是否必须逐一检查并重新注册所有的“默认”依赖项?使用默认依赖关系解析器注册默认值似乎很奇怪,但是当设置新的依赖关系解析器时,我看不到重新注册默认值的快速方法。对于像ILogger这样的东西,我似乎甚至无法访问默认的System.Web.Http.Common.Logging.DiagnosticLogger来进行绑定。

我是不是遗漏了什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-03-29 07:47:00

您不必重新注册默认服务。如果你返回null,框架将默认返回到它的内部DI容器。此外,在最新的比特中,它只会询问一次。

票数 2
EN

Stack Overflow用户

发布于 2012-03-29 23:48:30

最后,可能更好的方法是为Ninject创建一个IDependencyResolver。我确信将会有一个“合适的”由对Ninject有更多知识的人创建的,但目前我正在使用:

代码语言:javascript
运行
复制
public class NinjectDependencyResolverAdapter : IDependencyResolver
{
    private readonly IKernel kernel; 

    public NinjectDependencyResolverAdapter(IKernel kernel)
    {
        this.kernel = kernel;
    }

    #region Implementation of IDependencyResolver

    public object GetService(Type serviceType)
    {
        return kernel.TryGet(serviceType);
    }

    public IEnumerable<object> GetServices(Type serviceType)
    {
        return kernel.GetAll(serviceType);
    }

    #endregion
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9916514

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档