gpt4 book ai didi

c# - 如何将 IoC 容器传递给 NancyFX? (欧文,团​​结)

转载 作者:太空狗 更新时间:2023-10-29 17:34:11 26 4
gpt4 key购买 nike

我有一个 Windows 服务,我使用 OWIN 和 NancyFX 在其上托管一个网站。在我服务的许多地方,我使用 Unity 将依赖项注入(inject)类,主要是服务。但是,如果我在任何 Nancy 模块中使用它们,依赖关系会得到两次解析,因为 Nancy 使用它自己的 IoC 容器 (TinyIoC)。

幸运的是,Nancy 允许通过创建 nancy Bootstrap 来覆盖默认的 IoC 容器生成和现有容器的使用。但是如何将现有的 IUnityContainer 传递给 Bootstrap ?

基本上,启动 OWIN 所需要做的就是......

WebApp.Start<MyOwinStarter>(url);

如何将 Unity 容器传递给它以将其进一步传递给 nancy Bootstrap ?

最佳答案

@ ccellar让我走上了正确的方向。

我使用以下方法创建了一个静态类 UnityHelper:

private static Lazy<IUnityContainer> container = new Lazy<IUnityContainer>(() => {
var section = (UnityConfigurationSection)ConfigurationManager.GetSection("unityConfiguration");
return new UnityContainer().LoadConfiguration(section);
});

public static IUnityContainer GetConfiguredContainer() {
return container.Value;
}

创建了一个自定义的 NancyBootstrapper 类:

public NancyBootstrapper(IUnityContainer container) {
if(container == null)
throw new ArgumentNullException("container");
this._unityContainer = container;
}


protected override IUnityContainer GetApplicationContainer() {
return _unityContainer;
}

并将容器传递给我的网络应用程序启动类中的 Bootstrap :

appBuilder.UseNancy(new NancyOptions {
EnableClientCertificates = true,
Bootstrapper
= new NancyBootstrapper(UnityHelper.GetConfiguredContainer())
});

整洁!

关于c# - 如何将 IoC 容器传递给 NancyFX? (欧文,团​​结),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21818469/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com