- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我在使用 AutoMapper 4.2,但我无法弄清楚为什么会出现此错误
Autofac.Core.Registration.ComponentNotRegisteredException The requested service 'Navigator.ItemManagement.Data.MappingProfiles.ReportPreferenceReportUserIdsResolver' has not been registered. To avoid this exception, either register a component to provide the service, check for service registration using IsRegistered(), or use the ResolveOptional() method to resolve an optional dependency.
我的一个值解析器出现此错误
public class ReportPreferenceProfile : Profile
{
protected override void Configure()
{
CreateMap<ReportPreference, ReportPreferenceSummaryDto>()
.ForMember(d => d.Id, o => o.MapFrom(s => s.Id))
.ForMember(d => d.Name, o => o.MapFrom(s => s.Name))
.ForMember(d => d.ReportUserIds, o => o.ResolveUsing<ReportPreferenceReportUserIdsResolver>());
}
}
public class ReportPreferenceReportUserIdsResolver : ValueResolver<IList<ReportUser>, IList<Guid>>
{
protected override IList<Guid> ResolveCore(IList<ReportUser> source)
{
return source.Select(r => r.UserId).ToList();
}
}
我已经在我的 Autofac 模块中注册了它
protected override void Load(ContainerBuilder builder)
{
builder.RegisterType<ReportPreferenceReportUserIdsResolver>().As<IValueResolver>();
//register all profile classes in the calling assembly
var profiles =
from t in typeof(Navigator.ItemManagement.Data.MappingProfiles.PlaceMapperProfile).Assembly.GetTypes()
where typeof(Profile).IsAssignableFrom(t)
select (Profile)Activator.CreateInstance(t);
builder.Register(context => new MapperConfiguration(cfg =>
{
foreach (var profile in profiles)
{
cfg.AddProfile(profile);
}
})).AsSelf().SingleInstance();
builder.Register(c => c.Resolve<MapperConfiguration>().CreateMapper(c.Resolve))
.As<IMapper>()
.SingleInstance();
}
更新 1
我尝试了 Lucian Bargaoanu 的建议并替换了
builder.RegisterType<ReportPreferenceReportUserIdsResolver>().As<IValueResolver>();
与
builder.RegisterType<ReportPreferenceReportUserIdsResolver>().AsSelf();
现在我得到的错误是
System.ObjectDisposedException
This resolve operation has already ended. When registering components using lambdas, the IComponentContext 'c' parameter to the lambda cannot be stored. Instead, either resolve IComponentContext again from 'c', or resolve a Func<> based factory to create subsequent components from.
Mapping types: ReportPreference -> IList
1
1[[System.Guid, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]
Navigator.ItemManagement.Core.ItemAggregate.ReportPreference ->
System.Collections.Generic.IListDestination path: ReportJobSummaryDto.Reports.Reports.Reports0[0].ReportUserIds0[0]
Source value: Navigator.ItemManagement.Core.ItemAggregate.ReportPreference ---> AutoMapper.AutoMapperMappingException:
Mapping types: ReportPreference -> IList
1
1[[System.Guid, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]
Navigator.ItemManagement.Core.ItemAggregate.ReportPreference ->
System.Collections.Generic.IListDestination path: ReportJobSummaryDto.Reports.Reports.Reports0[0].ReportUserIds0[0]
最佳答案
我遇到同样的问题后来到了这个问答。
正如@PeterRiesz 在评论中提到的,由于您的 IValueResolver
不需要任何依赖项,因此这里最简单的解决方案是更改连接值解析器的形式,以仅采用手动新实例:
o.ResolveUsing(new ReportPreferenceReportUserIdsResolver())
这不需要在 Autofac 容器中进行任何注册。
但是,您可能希望向其中注入(inject)服务,或者出于其他原因和可维护性而只想使用 Autofac 注册它。
首先,确保您已将 IValueResolver
类型注册为 @LucianBargaoanu answered 到 Autofac。 :
builder.RegisterType<ReportPreferenceReportUserIdsResolver>().AsSelf();
我以与您相同的方式定义我的 AutoMapper 注册,结果也遇到了与您在上面显示的相同的错误。
经过大量研究和反复试验自己解决错误后,我发现了这个 StackOverflow Q&A这让我朝着正确的方向前进。
您已经在此处为 AutoMapper 设置服务函数以用于解析依赖关系:
builder.Register(c => c.Resolve<MapperConfiguration>().CreateMapper(c.Resolve))
.As<IMapper>()
.SingleInstance();
但是,正如错误所述,上下文 c
已在实际执行时被处理掉。解决这个问题的方法是重写 lambda 注册,如下所示:
builder.Register(c =>
{
//This resolves a new context that can be used later.
var context = c.Resolve<IComponentContext>();
var config = context.Resolve<MapperConfiguration>();
return config.CreateMapper(context.Resolve);
})
.As<IMapper>()
.SingleInstance();
还有一种注册服务解析器的方法。您可以在 MapperConfiguration 注册中执行此操作,而不是如下所示:
builder.Register(c =>
{
//Again, we must store a new instance of a component context for later use.
var context = c.Resolve<IComponentContext>();
var profiles = c.Resolve<IEnumerable<Profile>>();
return new MapperConfiguration(x =>
{
foreach (var profile in profiles)
{
x.AddProfile(profile);
}
//Registering the service resolver method here.
x.ConstructServicesUsing(context.Resolve);
});
})
.SingleInstance()
.AsSelf();
这两个似乎是等价的。我个人认为后者更清洁。
这里要注意的是,需要在顶层 lambda 中解析一个新的上下文,因为传入的实例将在 lambda 实际执行时被释放。
关于c# - 注册 AutoMapper ValueResolvers?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45497060/
我有一个问题,想知道如何在已经使用常规登录/注册系统的网站上集成第 3 方登录(也进行静默注册)。 基本上当前登录还是比较规律的: 当用户进入网站 session 时类(class)决定他是否需要重新
我在学习 Hyperledger Fabric 并运行示例代码。 我仍在尝试正确了解事情的运作方式,尤其是在使用证书和加密 Material 的用户/管理员注册和注册中。 我想知道以下如何工作。 1)
我正在尝试使用从我的 Android 设备的 PassWallet 应用程序中保存的票证中获取的 token 向我的设备发送消息。 设备发送使用苹果钱包规范更新通行证所需的所有信息。但是,我正在使用
使用 Passport 本地示例,我可以登录工作。没有关于如何注册用户的文档。 我想为用户提供一个“电子邮件”和“密码”字段,他们可以使用它们来注册该网站。我怎样才能做到这一点?有什么原因没有记录下来
在之前的一些 WSO2IS 版本中,有一个默认的 self 注册功能。但是,我在 5.0 版本中找不到它。 阅读 WSO2IS 5.0 文档,我发现有 2 个用于此功能的 API: getUserId
我已将 Airship SDK 集成到 Android 应用程序中。在应用程序启动和飞艇起飞后,我在日志中得到以下调试信息: 07-27 12:46:31.916 XXX - UALib( 1545)
Delphi 中设计时包的可怕错误之一是以下错误,这意味着注册安装新组件到您的 Palette 上的包: Component TSomething can't be registered by pac
我发现的大部分内容都使用 php 或类似的东西。 我有一个 Angular 前端和 Node/express 服务器代码。还没有后端。我不确定如何继续用户注册。 最佳答案 在没有后端的情况下进行注册等
我正在使用 Drupal 6 开发一个网站。我正在使用我自己的主题,并且一切正常。现在我需要使用我的自定义主题在我的网站上创建一个自定义登录/注册表单。我尝试了很多方法,但一切都重定向到我的管理主题,
我在运行此代码时收到 Sip 异常。这是因为 manager.register(me,20,listener)。 下面是我的代码,所以请帮我更正这段代码。我正在使用 SipDemo 代码注册我的帐户。
在过去的几天里,我一直在尝试为基于 VUE 的 excel 制作任务 Pane 插件。 我已按照 link 的指南进行操作我试图为 onSelectionChange 注册一个事件处理程序。它已经有些
我需要在使用 django-registration 应用程序的登录表单中实现一个“记住我”按钮。任何ane可以帮助我向我展示这样做的方法吗? 谢谢 最佳答案 一种方法是更改 session 到期
我发现,如果您使用 Django 1.5 版本,则 django 注册模块会中断,因为在最新的 django 开发版本中,simple.py 类已被删除。 最佳答案 此问题现已修复: hg clone
我正在尝试将 facebook connect 实现到我的网站,但有几个问题。 1:是否可以使用用户当前的 Facebook 电子邮件/密码在我的网站上注册用户。 假设用户点击链接通过 faceboo
我使用 Facebook 注册来允许人们在我的网站上注册。有没有可能,在注册后,他在我的网站注册的成员(member)墙上会张贴? 最佳答案 这可能不是您正在寻找的答案,但我强烈建议您不要这样做。用户
I would like to use a slash (/) for a search during a vimscript, but I don't want to overwrite the "
我正在使用 jqgrid 并且有显示日期的列,但是来自服务器的日期以 json 格式出现,如下所示, "CommentedDate": "\/Date(1304324941000+0530)\/" 如
我希望用户可以直接登录主页,而不是在“../account/login/”页面上登录。我应该做什么才能使它成为可能?如何将主页上的输入字段与 allauth 连接?我不知道这样是否太复杂而无法以这种方
This question already has answers here: Understanding NSString comparison (7个答案) 5年前关闭。 我正在尝试制作注册表。有
我正在使用 Django 注册。它提供了处理 registration_form.html 的 View ,该 html 当前包含用户名、密码 1、密码 2 和电子邮件作为我的应用程序中的用户可输入字
我是一名优秀的程序员,十分优秀!