发布模式下的.Net Native IoC容器注册问题

时间:2016-09-09 06:23:17

标签: c# uwp ioc-container .net-native

应用程序可以在调试模式下工作。

在发布模式下,我得到例外

  

抛出异常:Autofac.dll中的'Autofac.Core.Registration.ComponentNotRegisteredException'

     

其他信息:请求的服务'Microsoft.Extensions.Options.IOptions`1 [[TIKSN.GroceryChecklist.Models.Configuration.HockeyAppConfiguration,Models,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null]]'没有注册。要避免此异常,请注册组件以提供服务,使用IsRegistered()检查服务注册,或使用ResolveOptional()方法解析可选依赖项。

这是引发异常的行

var hockeyAppOptions = serviceProvider.GetRequiredService<IOptions<HockeyAppConfiguration>>();

但是此选项已配置并在调试模式下正常工作。

services.Configure<HockeyAppConfiguration>(option =>
        {
            option.AppID = "my key";

        });

我还尝试在 Default.rd.xml 文件中添加类型注册行,但它既不起作用。

<Type Name="Microsoft.Extensions.Options.IOptions{TIKSN.GroceryChecklist.Models.Configuration.HockeyAppConfiguration}" Dynamic="Required Public" />

1 个答案:

答案 0 :(得分:1)

我找到了解决方案。我添加了这一行并在调试模式下运行。

Debug.WriteLine($"hockeyAppOptions.Type is {hockeyAppOptions.GetType().FullName}");

输出

hockeyAppOptions.Type is Microsoft.Extensions.Options.OptionsManager`1[[TIKSN.GroceryChecklist.Models.Configuration.HockeyAppConfiguration, Models, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]

所以我用

替换了RD.XML中的上一个
<Type Name="Microsoft.Extensions.Options.OptionsManager{TIKSN.GroceryChecklist.Models.Configuration.HockeyAppConfiguration}" Dynamic="Required Public" />

它有效。