3

我一直在阅读大量的Jabbr代码来学习 Nancy,并尝试在我自己的应用程序中实现许多相同的模式。我似乎无法开始工作的一件事是应用程序启动类的概念。Jabbr 代码库有一个App_Start文件夹,其中包含一个Startup.cs文件(此处),其中包含以下实现。

public partial class Startup
{
    public void Configuration(IAppBuilder app)
    {
        ...

        SetupNancy(kernel, app);

        ...
    }
 }

private static void SetupNancy(IKernel kernel, IAppBuilder app)
{
    var bootstrapper = new JabbRNinjectNancyBootstrapper(kernel);
    app.UseNancy(bootstrapper);
}

当我尝试在我的项目中做类似的事情时,该Startup.cs文件被忽略了。我搜索了 Jabbr 代码库以查看它是否在任何地方使用,但我找不到任何东西,我能看到的唯一区别是 Jabbr 使用Ninject而我想使用AutoFac

有没有办法在南希注册一个创业班?

看看我在GitHub 上的项目,你会对 Spike 分支感兴趣,可能需要卸载ChainLink.Web项目才能运行,我不记得了。

4

3 回答 3

14

即使在阅读 TheCodeJunkie 在这里接受的答案后,我也很难找到配置 ILifetimeScope 的方法。以下是您如何进行实际配置:

在从AutofacNancyBootstrapper派生的引导程序类中,要实际配置请求容器,您需要更新 ILifetimeScope 的组件注册表

protected override void ConfigureRequestContainer(
    ILifetimeScope container, NancyContext context)
{
    var builder = new ContainerBuilder();
    builder.RegisterType<MyDependency>();
    builder.Update(container.ComponentRegistry);
}

可以在 ConfigureApplicationContainer 覆盖中类似地更新应用程序容器。

于 2013-09-25T06:06:05.427 回答
1

您应该安装Nancy.Bootstrappers.Autofacnuget,从 AutofacNancyBootstrapper 类型继承并覆盖适当的方法(取决于您的生命周期范围要求:应用程序或请求)。有关更多信息,请查看自述文件https://github.com/nancyfx/nancy.bootstrappers.autofac

高温高压

于 2013-06-26T20:00:27.883 回答
0

遵循TheCodeJunkie的建议后,您可以在容器参数上使用该Update方法,该方法为您提供了一个:ILifetimeScopeContainerBuilderAction

protected override void ConfigureRequestContainer(ILifetimeScope container, NancyContext context)
{
    container.Update(builder =>
    {
        builder.RegisterType<MyType>();
    });
}
于 2015-11-24T23:13:16.453 回答