1

我正在尝试使用 Bootstrapper 为我的应用程序、ioc、automapper、配置等进行初始化。

我需要一些关于如何使用引导程序在 asp.net webapi 中正确设置 ninject 的指导。使用以下配置,我的 apicontroller 无法解析 IMyService 依赖项。看起来它正在使用不同的ninject内核。

我的 NinjectWebCommon

public static class NinjectWebCommon 
{
    private static readonly Bootstrapper bootstrapper = new Bootstrapper();

    /// <summary>
    /// Starts the application
    /// </summary>
    public static void Start() 
    {
        DynamicModuleUtility.RegisterModule(typeof(OnePerRequestHttpModule));
        DynamicModuleUtility.RegisterModule(typeof(NinjectHttpModule));
        bootstrapper.Initialize(CreateKernel);
    }

    /// <summary>
    /// Stops the application.
    /// </summary>
    public static void Stop()
    {
        bootstrapper.ShutDown();
    }

    /// <summary>
    /// Creates the kernel that will manage your application.
    /// </summary>
    /// <returns>The created kernel.</returns>
    private static IKernel CreateKernel()
    {
        var kernel = new StandardKernel();
        kernel.Bind<Func<IKernel>>().ToMethod(ctx => () => new Bootstrapper().Kernel);
        kernel.Bind<IHttpModule>().To<HttpApplicationInitializationHttpModule>();

        GlobalConfiguration.Configuration.DependencyResolver = new MyResolver(kernel);

        RegisterServices(kernel);
        return kernel;
    }

    /// <summary>
    /// Load your modules or register your services here!
    /// </summary>
    /// <param name="kernel">The kernel.</param>
    private static void RegisterServices(IKernel kernel)
    {
    }        
}

引导程序 ninject 注册

public class DIRegistration : INinjectRegistration
{
    public void Register(IKernel container)
    {
        container.Bind<IMyService>().To<MyService>().InTransientScope();
    }
}

public class MyService: IMyService
{
    public string GetString()
    {
        return "My String!!!!!";
    }
}

public interface IMyService 
{
    string GetString();
}
4

3 回答 3

1

我为解决这个问题所做的就是转向bootstrapper.Initialize(CreateKernel);我为 NinjectWebBootstrap 创建的 IStartupTask 实现。基本上使用由 Bootstrapper 框架注入的 IKernal 并运行我的注册,最后设置 asp.net webapi,然后使用接受注入的 IKernal 实例的自定义解析设置 DepdendencyResolver。

于 2013-03-21T22:07:38.873 回答
0

DIRegistration从未使用过。所以这种绑定不存在。

于 2013-03-19T21:52:26.347 回答
0

我试图直接在数据库中更新值,但在我的 WCF 中没有更新值,它使用实体框架在 svc 文件中使用 Ninject - 与https://github.com/ninject/ninject.extensions.wcf/tree中的方式相同/master/src/Examples/WcfTimeService并使用引导。

If found out that if I recycle the IIS app pool, the data gets refreshed and it works as expected. I guess it IIS and Ninject which is creating this caching issue. Do you have any idea about it?

于 2013-03-21T22:43:26.990 回答