c# – 使用新的WCF Web API设置Ninject

前端之家收集整理的这篇文章主要介绍了c# – 使用新的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);

所以我把鸡抓了下面:

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)
    {
        throw new NotImplementedException();
    }

    #endregion

    private object Resolve(Type type)
    {
        return _kernel.Get(type);
    }

    //private T Resolve<T>()
    //{
    //    return _kernel.Get<T>();
    //}

    //private T Resolve<T>(string name)
    //{
    //    return _kernel.Get<T>(MetaData => MetaData.Has(name));
    //    return _kernel.Get<T>().Equals(With.Parameters.
    //                                   ContextVariable("name",name));
    //}
}

用它连接起来

var configuration = HttpHostConfiguration.Create().SetResourceFactory(new NinjectResourceFactory());
     RouteTable.Routes.MapServiceRoute<StateProvinceResource>("States",configuration);

令人惊讶的是,这似乎有效.我创建的第一个用于提供状态/省份列表的资源方法使用HTTP 200 OK生成输出.

所以,问题.有没有更清洁的方式来写这个工厂?我真的很喜欢它,感觉不对劲.我觉得我错过了一些明显盯着我的东西.我在新的Resolve方法中做的黑客感觉特别脏,所以我想我会利用那些经验丰富的人来收紧它.有没有其他人使用WCF Web API实现Ninject并实现了更清洁的解决方案?

感谢您的任何意见!

解决方法

您可以通过从应用程序范围传入内核来实现它.
public class NinjectResourceFactory : IResourceFactory
{
    private readonly IKernel _kernel;

    public NinjectResourceFactory(IKernel kernel)
    {
        _kernel = kernel;
    }

    public object GetInstance(Type serviceType,HttpRequestMessage request)
    {
        return _kernel.Get(serviceType);
    }

    public void ReleaseInstance(InstanceContext instanceContext,object service)
    {
        // no op
    }
}

猜你在找的C#相关文章