在Unity中使用IOptions

时间:2017-09-05 20:04:15

标签: c# .net dependency-injection unity-container

我有一个从ASP.Net Core(目标4.5)和4.5 Web应用程序引用的类库,我想要共享应用程序设置。我在4.5方面使用Unity for DI,在Core方面使用Core Bootstrapping。在核心方面,我注册了一种类似我的应用程序设置

services.Configure<AppSettings>(Configuration.GetSection("AppSettings"));

然后我像这样引用AppSettings

private readonly AppSettings _appSettings;
public SubmissionRepository(PricingContext dbContext, IMapper mapper, IOptions<AppSettings> appSettings)
{
     _appSettings = appSettings;
}

我想在4.5方面注册我的服务,我能够在Unity的WebApiConfig.cs中执行此操作

container.RegisterType<AppSettings>(new InjectionFactory(o => BuildAppSettings()));

其中BuildAppSettings只使用ConfigurationManager填充该类型的实例(不确定这是否是正确的方法)

但是我在运行时遇到异常

  

无法转换类型为'.Core.Integration.Models.AppSettings'的对象   输入   'Microsoft.Extensions.Options.IOptions`1 [Core.Integration.Models.AppSettings]'。

我猜我需要以某种方式将IOptions实例放入我的容器中,但不知道如何做到这一点。是否有更好/更好的方法来做到这一点?

1 个答案:

答案 0 :(得分:3)

如果我再用Google搜索10秒钟,我就会找到这个

Options.Create(new AppSettings{
    // config reads
});