- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
什么会导致我的 DI 在 Debug模式下正常但在 Release模式下崩溃?这是一个 Xamarin.Forms 应用程序,正在 Android 上运行。
07-23 20:56:53.002 I/MonoDroid(15451): UNHANDLED EXCEPTION: Autofac.Core.DependencyResolutionException: An exception was thrown while executing a resolve operation. See the InnerException for details. ---> Object reference not set to an instance of an object (See inner exception for details.) ---> System.NullReferenceException: Object reference not set to an instance of an object
07-23 20:56:53.002 I/MonoDroid(15451): at System.Linq.Expressions.Expression.CreateLambda (System.Type delegateType, System.Linq.Expressions.Expression body, System.String name, Boolean tailCall, System.Collections.ObjectModel.ReadOnlyCollection`1 parameters) [0x00000] in <filename unknown>:0
07-23 20:56:53.002 I/MonoDroid(15451): at System.Linq.Expressions.Expression.Lambda (System.Type delegateType, System.Linq.Expressions.Expression body, System.String name, Boolean tailCall, IEnumerable`1 parameters) [0x00000] in <filename unknown>:0
07-23 20:56:53.002 I/MonoDroid(15451): at System.Linq.Expressions.Expression.Lambda (System.Type delegateType, System.Linq.Expressions.Expression body, IEnumerable`1 parameters) [0x00000] in <filename unknown>:0
07-23 20:56:53.002 I/MonoDroid(15451): at Autofac.Features.GeneratedFactories.FactoryGenerator.CreateGenerator (System.Func`3 makeResolveCall, System.Type delegateType, ParameterMapping pm) [0x00000] in <filename unknown>:0
07-23 20:56:53.002 I/MonoDroid(15451): at Autofac.Features.GeneratedFactories.FactoryGenerator..ctor (System.Type delegateType, IComponentRegistration productRegistration, ParameterMapping parameterMapping) [0x00000] in <filename unknown>:0
07-23 20:56:53.002 I/MonoDroid(15451): at Autofac.Features.GeneratedFactories.GeneratedFactoryRegistrationSource+<>c__DisplayClass2.<RegistrationsFor>b__0 (IComponentRegistration r) [0x00000] in <filename unknown>:0
07-23 20:56:53.002 I/MonoDroid(15451): at System.Linq.Enumerable+<CreateSelectIterator>c__Iterator10`2[Autofac.Core.IComponentRegistration,Autofac.Core.IComponentRegistration].MoveNext () [0x00000] in <filename unknown>:0
07-23 20:56:53.002 I/MonoDroid(15451): at Autofac.Core.Registration.ComponentRegistry.GetInitializedServiceInfo (Autofac.Core.Service service) [0x00000] in <filename unknown>:0
07-23 20:56:53.002 I/MonoDroid(15451): at Autofac.Core.Registration.ComponentRegistry.TryGetRegistration (Autofac.Core.Service service, IComponentRegistration& registration) [0x00000] in <filename unknown>:0
07-23 20:56:53.002 I/MonoDroid(15451): at Autofac.Core.Activators.Reflection.AutowiringParameter.CanSupplyValue (System.Reflection.ParameterInfo pi, IComponentContext context, System.Func`1& valueProvider) [0x00000] in <filename unknown>:0
07-23 20:56:53.002 I/MonoDroid(15451): at Autofac.Core.Activators.Reflection.ConstructorParameterBinding..ctor (System.Reflection.ConstructorInfo ci, IEnumerable`1 availableParameters, IComponentContext context) [0x00000] in <filename unknown>:0
07-23 20:56:53.002 I/MonoDroid(15451): at Autofac.Core.Activators.Reflection.ReflectionActivator+<>c__DisplayClass5.<GetConstructorBindings>b__4 (System.Reflection.ConstructorInfo ci) [0x00000] in <filename unknown>:0
07-23 20:56:53.002 I/MonoDroid(15451): at System.Linq.Enumerable+<CreateSelectIterator>c__Iterator10`2[System.Reflection.ConstructorInfo,Autofac.Core.Activators.Reflection.ConstructorParameterBinding].MoveNext () [0x00000] in <filename unknown>:0
07-23 20:56:53.002 I/MonoDroid(15451): at System.Linq.Enumerable+<CreateWhereIterator>c__Iterator1E`1[Autofac.Core.Activators.Reflection.ConstructorParameterBinding].MoveNext () [0x00000] in <filename unknown>:0
07-23 20:56:53.002 I/MonoDroid(15451): at System.Linq.Enumerable.ToArray[ConstructorParameterBinding] (IEnumerable`1 source) [0x00000] in <filename unknown>:0
07-23 20:56:53.002 I/MonoDroid(15451): at Autofac.Core.Activators.Reflection.ReflectionActivator.ActivateInstance (IComponentContext context, IEnumerable`1 parameters) [0x00000] in <filename unknown>:0
07-23 20:56:53.002 I/MonoDroid(15451): at Autofac.Core.Resolving.InstanceLookup.Activate (IEnumerable`1 parameters) [0x00000] in <filename unknown>:0
07-23 20:56:53.002 I/MonoDroid(15451): at Autofac.Core.Resolving.InstanceLookup.Execute () [0x00000] in <filename unknown>:0
07-23 20:56:53.002 I/MonoDroid(15451): at Autofac.Core.Resolving.ResolveOperation.GetOrCreateInstance (ISharingLifetimeScope currentOperationScope, IComponentRegistration registration, IEnumerable`1 parameters) [0x00000] in <filename unknown>:0
07-23 20:56:53.002 I/MonoDroid(15451): at Autofac.Core.Resolving.ResolveOperation.ResolveComponent (IComponentRegistration registration, IEnumerable`1 parameters) [0x00000] in <filename unknown>:0
07-23 20:56:53.002 I/MonoDroid(15451): at Autofac.Core.Resolving.ResolveOperation.Execute (IComponentRegistration registration, IEnumerable`1 parameters) [0x00000] in <filename unknown>:0
07-23 20:56:53.002 I/MonoDroid(15451): -
Unhandled Exception:
Autofac.Core.DependencyResolutionException: An exception was thrown while executing a resolve operation. See the InnerException for details. ---> Object reference not set to an instance of an object (See inner exception for details.)
07-23 20:56:54.003 E/mono (15451):
07-23 20:56:54.003 E/mono (15451): Unhandled Exception:
07-23 20:56:54.003 E/mono (15451): Autofac.Core.DependencyResolutionException: An exception was thrown while executing a resolve operation. See the InnerException for details. ---> Object reference not set to an instance of an object (See inner exception for details.) ---> System.NullReferenceException: Object reference not set to an instance of an object
In mgmain JNI_OnLoad
07-23 20:56:54.003 E/mono (15451): at System.Linq.Expressions.Expression.CreateLambda (System.Type delegateType, System.Linq.Expressions.Expression body, System.String name, Boolean tailCall, System.Collections.ObjectModel.ReadOnlyCollection`1 parameters) [0x00000] in <filename unknown>:0
07-23 20:56:54.003 E/mono (15451): at System.Linq.Expressions.Expression.Lambda (System.Type delegateType, System.Linq.Expressions.Expression body, System.String name, Boolean tailCall, IEnumerable`1 parameters) [0x00000] in <filename unknown>:0
07-23 20:56:54.003 E/mono (15451): at System.Linq.Expressions.Expression.Lambda (System.Type delegateType, System.Linq.Expressions.Expression body, IEnumerable`1 parameters) [0x00000] in <filename unknown>:0
07-23 20:56:54.003 E/mono (15451): at Autofac.Features.Generate
07-23 20:56:54.003 E/mono-rt (15451): [ERROR] FATAL UNHANDLED EXCEPTION: Autofac.Core.DependencyResolutionException: An exception was thrown while executing a resolve operation. See the InnerException for details. ---> Object reference not set to an instance of an object (See inner exception for details.) ---> System.NullReferenceException: Object reference not set to an instance of an object
07-23 20:56:54.003 E/mono-rt (15451): at System.Linq.Expressions.Expression.CreateLambda (System.Type delegateType, System.Linq.Expressions.Expression body, System.String name, Boolean tailCall, System.Collections.ObjectModel.ReadOnlyCollection`1 parameters) [0x00000] in <filename unknown>:0
07-23 20:56:54.003 E/mono-rt (15451): at System.Linq.Expressions.Expression.Lambda (System.Type delegateType, System.Linq.Expressions.Expression body, System.String name, Boolean tailCall, IEnumerable`1 parameters) [0x00000] in <filename unknown>:0
07-23 20:56:54.003 E/mono-rt (15451): at System.Linq.Expressions.Expression.Lambda (System.Type delegateType, System.Linq.Expressions.Expression body, IEnumerable`1 parameters) [0x00000] in <filename unknown>:0
07-23 20:56:54.003 E/mono-rt (15451): at Autofac.Feat
The program 'Mono' has exited with code 0 (0x0).
我的构造函数的一个例子是这个
public MainPage(Func<Action, Action<bool?>, MainMenu> mainMenu,
ModulePage modulePage,
LoadingPage loadingPage,
Func<Action, AuthPage> authPage,
IUserDialogService userDialogService,
IModuleService moduleService,
ISyncCommand syncCommand)
{
_loadingPage = loadingPage;
_authPage = authPage;
_userDialogService = userDialogService;
_moduleService = moduleService;
_syncCommand = syncCommand;
Title = Strings.app_title;
var master = mainMenu(OnAfterDeauthenticated, OnToggleRequest());
var detail = new NavigationPage(modulePage);
if (App.Navigation == null)
{
App.Navigation = detail.Navigation;
}
Master = master;
Detail = detail;
}
ContainerBuilder 在 Android 应用程序中初始化,然后传递给 PCL。
安卓
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
Forms.Init(this, bundle);
var container = RegisterDependencies();
var page = App.GetMainPage(container);
SetPage(page);
}
private static IContainer RegisterDependencies()
{
var containerBuilder = new ContainerBuilder();
RegisterAndroidSpecific(containerBuilder);
var coreIoc = new CoreIoC(containerBuilder);
return coreIoc.Load();
}
private static void RegisterAndroidSpecific(ContainerBuilder containerBuilder)
{
containerBuilder.RegisterType<AudioPlayer>().SingleInstance().As<IAudioPlayer>();
containerBuilder.RegisterType<SettingsService>().As<ISettingsService>();
containerBuilder.RegisterType<NetworkService>().As<INetworkService>();
containerBuilder.RegisterType<NativeVideoPlayer>().As<IVideoPlayer>();
containerBuilder.RegisterType<MarkdownService>().As<IMarkdownService>();
containerBuilder.RegisterType<UserDialogService>().As<IUserDialogService>();
containerBuilder.RegisterType<DbProvider>()
.SingleInstance()
.WithParameters(new List<Parameter> {
new TypedParameter(typeof(string), "fsm-breathingroom"),
new TypedParameter(typeof(SqliteSettings), new SqliteSettings {
CacheSize = 16777216,
SyncMode = SynchronizationModes.Off,
JournalMode = SQLiteJournalModeEnum.Off,
PageSize = 65536
})
})
.As<IDbProvider>();
}
PCL
public static Page GetMainPage(IContainer container)
{
Container = container;
RegisterCurrentUser(Container.Resolve<UserModel>());
RunMigrations();
RegisterCurrentUser();
var rootPage = Container.Resolve<MainPage>();
return rootPage;
}
最佳答案
这是 Mono Linker 中的一个错误,删除了 System.Core 中的一些代码,请参阅 https://bugzilla.xamarin.com/show_bug.cgi?id=22342 Xamarin 声称它已在 11/2014 的 master 中修复,但我无法验证它。应该与下一个稳定版本之一一起登陆。
作为解决方法,您可以从链接器项目->选项->Android 构建->链接器->忽略程序集中排除 System.Core。
或者,直接注册 Func
也可以:
builder.Register<Func<FooPage>>(c => () => new FooPage());
关于c# - Autofac 依赖注入(inject)在 Debug 中有效,但在 Release 中崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24924391/
我已阅读有关依赖注入(inject)的信息。然后来了 构造函数注入(inject), setter/getter 注入(inject) 二传手注入(inject) 接口(interface)注入(in
我正在研究依赖注入(inject)模式。我看过很多例子,其中一个典型的例子是使用 XxxService/XxxRepository 作为例子。但是在我看来,按照UML的概念,类XxxRepositor
我开始使用 Google Guice。 我有一个简单的问题: javax.inject 的 @Inject 注释和 com.google.inject 的 有什么区别@Inject 一个 ? 谢谢。
当使用构造函数注入(inject)工厂方法时,依赖的属性不会得到解析。但是,如果在解析依赖的组件之前解析了工厂方法,则一切都会按预期工作。此外,当仅使用属性注入(inject)或构造函数注入(inje
我有这样的事情: class Root { public Root(IDependency dep) {} } class Dependency:IDependency { p
听完Clean Code Talks ,我开始明白我们应该使用工厂来组合对象。因此,例如,如果 House有一个 Door和 Door有一个 DoorKnob , 在 HouseFactory我们创建
情况:我需要在一些 FooClass 中进行惰性依赖实例化,所以我通过 Injector类作为构造函数参数。 private final Injector m_injector; public Foo
在编写代码时,我们应该能够识别两大类对象: 注入(inject)剂 新品 http://www.loosecouplings.com/2011/01/how-to-write-testable-cod
这个问题是关于 Unity Container 的,但我想它适用于任何依赖容器。 我有两个具有循环依赖关系的类: class FirstClass { [Dependency] pub
如果我有 10 个依赖项我需要注入(inject)并且不想在构造函数中有 10 个参数,我应该使用哪种注入(inject)模式? public class SomeClass { privat
我在使用 Angular2 DI 时遇到了问题。我尝试将一个类注入(inject)另一个类,它引发了以下错误: 留言:"Cannot resolve all parameters for 'Produ
对依赖注入(inject)还很陌生,我想弄清楚这是否是一种反模式。 假设我有 3 个程序集: Foo.Shared - this has all the interfaces Foo.Users -
我正在尝试了解 Angular 14 的变化,尤其是 inject()我可以将模块注入(inject)功能的功能,我不需要为此创建特殊服务..但我想我弄错了。 我正在尝试创建一些静态函数来使用包 ng
希望这个问题不是太愚蠢,我试图掌握更高级的编程原理,因此试图习惯使用 Ninject 进行依赖注入(inject)。 因此,我的模型分为几个不同的 .dll 项目。一个项目定义了模型规范(接口(int
我最近一直在大量使用依赖注入(inject)、测试驱动开发和单元测试,并且开始喜欢上它。 我在类中使用构造函数依赖,这样我就可以为单元测试注入(inject)模拟依赖。 但是,当您实际需要生产环境中的
我有下面的代码来使用 Guice 进行依赖注入(inject)。第一个是使用构造函数注入(inject),而另一个是直接在字段上方添加 @Inject。这两种方式有什么区别吗? Guice官网似乎推荐
这个问题在这里已经有了答案: Angular2 Beta dependency injection (3 个答案) 关闭 7 年前。 我正在使用 angular2 测试版。并在使用 @Inject
有没有可能做这样的事情? (因为我尝试过,但没有成功): @Injectable() class A { constructor(private http: Http){ // <-- Injec
我很恼火必须通过 Constructor 传递管道对象,因为我想为业务实体或要传递的值保留构造函数参数。 所以我想通过 setter ,但只要这些 setter 没有被填充,我的包含依赖项的对象就不应
假设我有这个: SomePage.razor: @inject Something something @page "/somepage" My Page @code { // Using
我是一名优秀的程序员,十分优秀!