我遇到以下异常:
“使用类型为'NetCore.DAL.EF.Repositories.Core.Common.SystemSettingRepository'的'Autofac.Core.Activators.Reflection.DefaultConstructorFinder'找到的任何构造函数都不能使用可用的服务和参数来调用:\ r \ n无法解析参数'NetCore.DAL.EF.DatabaseFactory
np.argmax(result) # 5 np.argmax(trainY[100]) # true label # 5
1 [NetCore.DAL.EF.AppDbContext])'。”
这是SystemSettingRepository的Autofac注册信息:
autofacServiceProvider.Non-Public成员。_lifetimeScope.ComponentRegistry.Registrations[28] = {Activator = SystemSettingRepository(ReflectionActivator),服务= [Dcs.NetCore.ApplicationCore.BLL.Domain.Features.Common.SystemSettings.ISystemSettingRepository,Dcs。 NetCore.Infrastructure.Common.IRepository`1 [[Dcs.NetCore.ApplicationCore.BLL.Domain.Entities.Common.SystemSetting,Dcs.NetCore.ApplicationCore.BLL,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null]] ,NetCore.DAL.EF.Repositories.Core.Common.SystemSettingRepository],生命周期= Autofac.Core.Lifetime.CurrentScopeLifetime,共享=无,所有权= OwnedByLifetimeScope}
autofacServiceProvider.Non-Public成员。_lifetimeScope.ComponentRegistry.Registrations[28]。 Target.Services [0] .ServiceType = {Dcs.NetCore.ApplicationCore.BLL.Domain.Features.Common。 SystemSettings.ISystemSettingRepository}
autofacServiceProvider.Non-Public成员。_lifetimeScope.ComponentRegistry.Registrations[28]。 Target.Services [1] .ServiceType = {Dcs.NetCore.Infrastructure.Common.IRepository`1 [Dcs。 NetCore.ApplicationCore.BLL.Domain.Entities.Common.SystemSetting]}
autofacServiceProvider.Non-Public成员。_lifetimeScope.ComponentRegistry.Registrations[28]。 Target.Services [2] .ServiceType = {NetCore.DAL.EF.Repositories.Core.Common.SystemSettingRepository}
如您所见,服务已注册。但是,databaseFactory参数不是。这是我的代码:
book = Book.new
book.title = 'Legends'
book.content = 'Once upon a time, in a far away galaxy'
book.serializable_hash # => {"title"=>"Legends", "content"=>"Once upon a time, in a far away galaxy"}
答案 0 :(得分:1)
该问题是由 bottomnavigation.setOnNavigationItemSelectedListener {
item ->
when(item.itemId){
R.id.first_fragment_item -> {
var fragment:Fragment = FirstFragment.newInstance()
replaceFragment(fragment)
return@setOnNavigationItemSelectedListener true
}
R.id.second_fragment_item -> {
var fragment:Fragment = SecondFragment.newInstance()
replaceFragment(fragment)
return@setOnNavigationItemSelectedListener true
}
}
return@setOnNavigationItemSelectedListener false
}
}
fun replaceFragment(fragment:Fragment) {
var fragmentName:String = fragment::class.simpleName!!
if(supportFragmentManager.findFragmentByTag(fragmentName)==null) {
val fragmentTransaction = supportFragmentManager.beginTransaction()
fragmentTransaction.replace(R.id.fragment_container, fragment, fragmentName)
fragmentTransaction.addToBackStack(fragmentName)
fragmentTransaction.commit()
}
else{
if(fragmentName == "FirstFragment") {
supportFragmentManager.beginTransaction().
hide(supportFragmentManager.findFragmentByTag("SecondFragment"))
.show(supportFragmentManager.findFragmentByTag("FirstFragment"))
.commit()
}
else{
supportFragmentManager.beginTransaction()
.hide(supportFragmentManager.findFragmentByTag("FirstFragment"))
.show(supportFragmentManager.findFragmentByTag("SecondFragment"))
.commit()
}
}
}
的注册方式引起的。此类型注册为接口<?php
$list = "
1
2
3
6
7
8
11
12
14
15
16
17
18
19
";
//make an array from a string list
$templates = array_values(array_filter(array_map('trim', explode("\n", $list))));
$temp = null;
foreach (range(0, 364) as $number) {
$temp[] = $templates[$number%14];
}
print_r($temp);
。但是在存储库注册时,方法DatabaseFactory<>
的lambda参数本身可以解决此问题:
IDatabaseFactory<>
Autofac不知道如何解决它,因为它没有相应的注册。为了使您的代码正常工作,您可以将DatabaseFactory解析为如下接口:
WithParameter()
或将 _builder.RegisterAssemblyTypes(_assembly)
.AsClosedTypesOf(typeof(IRepository<>))
.WithParameter(new ResolvedParameter((p, i) => p.Name == "databaseFactory",
// resolving type it self
// while it was registered as interface
(p, i) => i.Resolve<DatabaseFactory<AppDbContext>>()))
呼叫添加到注册:
.WithParameter(new ResolvedParameter((p, i) => p.Name == "databaseFactory",
(p, i) => i.Resolve<IDatabaseFactory<AppDbContext>>()))