Reflection 如何在Mvx.IoCProvider.Register中提供类似于OnActivate(在Autofac中)的功能

Reflection 如何在Mvx.IoCProvider.Register中提供类似于OnActivate(在Autofac中)的功能,reflection,inversion-of-control,autofac,mvvmcross,ioc-container,Reflection,Inversion Of Control,Autofac,Mvvmcross,Ioc Container,Autofac提供了OnActivated()方法,该方法能够在构造注册类型后运行任何操作 可以在MvvmCross中使用类似的方法吗?您有没有提供相同功能的想法?了解依赖注入(DI)的基本原理而不是依赖特定的DI容器特性通常是值得的。问自己这样一个问题:如果我没有DI容器,那么我将如何解决我的问题 具有讽刺意味的是,事实证明,事情通常更简单 如果您没有DI容器,那么在构建对象之后如何运行操作 最简单的解决方案是提供一个创建和初始化对象的工厂。假设API和需求与相同,您可以这样做: public

Autofac提供了
OnActivated()
方法,该方法能够在构造注册类型后运行任何操作


可以在MvvmCross中使用类似的方法吗?您有没有提供相同功能的想法?

了解依赖注入(DI)的基本原理而不是依赖特定的DI容器特性通常是值得的。问自己这样一个问题:如果我没有DI容器,那么我将如何解决我的问题

具有讽刺意味的是,事实证明,事情通常更简单

如果您没有DI容器,那么在构建对象之后如何运行操作

最简单的解决方案是提供一个创建和初始化对象的工厂。假设API和需求与相同,您可以这样做:

public static Dependency2 CreateDependency2(ITestOutputHelper output, Dependency1 dependency)
{
    var d2 = new Dependency2(ITestOutputHelper output, Dependency1 dependency);
    d2.Initialize();
    return d2;
}
如果您仍然必须使用另一个DI容器,则大多数DI容器都允许您针对类型注册如上所述的工厂。我不知道MvvmCross是如何工作的,但如果这不可能,我会感到惊讶。如果不是,您可以在实际依赖关系之上实现一个。适配器将负责在调整的对象上运行操作


FWIW,如果对象在您对其运行某些操作之前未处于有效状态,则封装被破坏。封装的基本特征是对象保护它们的不变量,这样它们就永远不会处于无效状态。如果可能的话,考虑一个更好的API设计。

它通常依赖于依赖依赖注入(DI)的基础,而不是依赖于特定的DI容器特性。问自己这样一个问题:如果我没有DI容器,那么我将如何解决我的问题

具有讽刺意味的是,事实证明,事情通常更简单

如果您没有DI容器,那么在构建对象之后如何运行操作

最简单的解决方案是提供一个创建和初始化对象的工厂。假设API和需求与相同,您可以这样做:

public static Dependency2 CreateDependency2(ITestOutputHelper output, Dependency1 dependency)
{
    var d2 = new Dependency2(ITestOutputHelper output, Dependency1 dependency);
    d2.Initialize();
    return d2;
}
如果您仍然必须使用另一个DI容器,则大多数DI容器都允许您针对类型注册如上所述的工厂。我不知道MvvmCross是如何工作的,但如果这不可能,我会感到惊讶。如果不是,您可以在实际依赖关系之上实现一个。适配器将负责在调整的对象上运行操作

FWIW,如果对象在您对其运行某些操作之前未处于有效状态,则封装被破坏。封装的基本特征是对象保护它们的不变量,这样它们就永远不会处于无效状态。如果可能的话,考虑一个更好的API设计。