- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
据我了解,SimpleIoc 使用 GetInstance 方法来检索已注册的类的实例。如果实例不存在,它将创建它。但是,该实例会被缓存并始终被检索,这模仿了单例模式。
我的想法是,如果这个 ViewModel 被需要两次的可能性很小,那么就没有必要在内存中保留 ViewModel 的实例,所以我想在每次需要时创建它的新实例。如果我们有一个 ViewModel 工厂,我们将有一个像这样的属性:
public MyViewMOdel MyViewModel
{
get { return SimpleIoc.Default.GetInstance<MyViewModel>(); }
}
这个使用单例模式,我认为这并不是在所有情况下都是最佳实践。为了避免这个问题,我这样做:
public MyViewModel MyViewModel
{
get { return new MyViewModel(SimpleIoc.Default.GetInstance<ISomeInterface>()); }
}
这个有一个缺点,如果我更改 MyViewModel 的构造函数,我也需要更新此属性。没什么大不了的,但仍然存在某种依赖性。
你如何处理这种情况,我有什么遗漏的吗?以及为什么决定不返回非共享实例。
另一个问题是,在 MVVM 深度潜水 session 中,Laurent 在注册特定 ViewModel 后立即使用 GetInstance 方法,以便如他所说,确保容器中已经存在此 ViewModel 的实例。为什么这是必要的?如果您通过 ViewModelLocator 获取 ViewModel,那么您将在需要时创建它。那么为什么我要预先创建它们呢?
最佳答案
通过将不同的键传递给 GetInstance 方法,您可以每次获取不同的实例。但是实例将被缓存,因此如果您不想将它们保留在缓存中,则需要使用相应的 key 调用 Unregister。
在演示中,我预先创建了 VM,因为 MainVM 正在向 secondaryVM 发送消息。由于 Messenger 的注册是在 secondaryVm 的构造函数中完成的,因此需要先创建它,然后才能开始接收消息。 Messenger 很棒,因为它非常解耦,但在其中一种情况下,您需要做额外的工作来补偿解耦:SecondaryVM 是消息的目标,即使 MainVM 没有获得任何对它的引用。
希望这是有道理的。干杯,洛朗
关于c#-4.0 - SimpleIoc - 它可以在每次需要时提供新实例吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9342294/
我在我的项目中使用带有 MVVM Light 的 WPF。我有一些关于 SimpleIoC 的小问题容器和 DI。哪个是更好的使用方法,或者告诉我是否不需要在那里使用 DI。 有我的VM构造函数: p
如何使用 SimpleIOC 注册通用存储库? public interface IRepository { } public class Repository : IReposito
我需要创建一个 ViewModel 的实例,并在创建时将特定参数传递给 ViewModel。同时这个ViewModel实例应该在SimpleIOC中注册 我认为这是它的方法: SimpleIoc.Re
使用 SimpleIoc 我想注册 IProvider 的多个实现,例如: SimpleIoc.Default.Register(); SimpleIoc.Default.Register(); 所以
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 7 年前。
据我了解,SimpleIoc 使用 GetInstance 方法来检索已注册的类的实例。如果实例不存在,它将创建它。但是,该实例会被缓存并始终被检索,这模仿了单例模式。 我的想法是,如果这个 View
我有一个使用 MVVM Light 的 wpf 应用程序.我有两个类和接口(interface): public interface ICrud{ // } public class CrudDAO
我只需要知道 MVVM Light 的 SimpleIoC 背后是什么?是现有的之一(Unity、CaSTLe Windsor、StructureMap、MEF,也许是 Simple Injector
我想在我的 View 模型定位器类中注册和取消注册我的 View 模型。 我想收集我所有的 View 模型并迭代它们以注册和注销它们。处理注册的方法声明如下: public bool IsRegist
我有一个 LoB WPF 应用程序,需要找到一种方法来全局处理和记录异常。 我知道我在做这样的事情: public partial class App : Application {
我正在使用 MVVM Light 开发一个新项目。我听说你最好不要使用随附的 SimpleIoC,因为有几个限制。但是使用 SimpleIoC 的缺点/限制是什么? 在做出这种选择时使用 Ninjec
我在 Xamarin 项目中使用 mvvm light SimpleIoC 并使用实例键来获取一些 View 模型。 SimpleIoc.Default.GetInstance("contextIde
我刚刚开始使用 mvvm light 工具包中的 SimpleIOC。我只是想知道是否可以选择将参数化构造函数作为 PreferredConstructor? 此功能是否适用于 SimpleIOC?如
我在我当前的 Windows Phone 项目中使用 SterlingDB,我希望能够使用 MVVM Light v4 中的新 SimpleIoC 容器从我的应用程序的各个位置解析 Sterling
使用 MVVM 的 SimpleIoc,我想为给定接口(interface)注册一个实现,但该实现在其构造函数中需要一个参数: public class MyServiceImplementation
我已经开始使用最新的 MVVM Light 工具包 v4(NuGet 预览版 v4.1.21,DLL v:4.0.21.25725),它实现了 SimpleIOC 模式。 在我的 ViewModelL
我正在借助 MVVM Light Toolkit 4.1.24 开发 WPF 应用程序。这是我的 ViewModel Locator 类。 public class ViewModelLocator
我正在使用适用于 Windows 8 的 MVVM Light 第 4 版;它包括 SimpleIOC。在各种示例中,我有时会看到基于 SimpleIoc 请求对象的代码......有时它基于 Ser
在ViewModelLocator的静态构造函数中类 SimpleIoc.Default.Register();在 IsInDesignModeStatic 处失败模式,如果接口(interface)
我是一名优秀的程序员,十分优秀!