use*_*618 2 silverlight inversion-of-control unity-container mvvm
我正在开发一个Silverlight应用程序,我已经介绍Unity了它.
我遇到的问题是我不知道如何获取容器的实例.
我在ApplicationStartup方法上创建了这个intanceApp
_container = new UnityContainer();
_container.RegisterType<IMyAppServiceAgent, MyAppServiceAgent>(new InjectionConstructor(OriginalHandlerId, W2OGuid, ServiceEndpointAddr));
Run Code Online (Sandbox Code Playgroud)
我写了一个吸气剂
public IUnityContainer Container
{
get { return _container; }
}
Run Code Online (Sandbox Code Playgroud)
一切正常,这就是我如何使用我的容器:
public static void CreateMemberSearch()
{
if (_memberSearch == null)
{
_memberSearch =
new MemberSearchViewModel((App.Current as App).Container.Resolve<IMyAppServiceAgent>());
}
}
Run Code Online (Sandbox Code Playgroud)
以上示例来自ViewModelLocator(from MVVM Light Toolkit).
我需要知道如何重构我的代码以符合IOC原则.
上面显示的代码实现了ServiceLocator反模式.你永远不应该直接调用容器.
容器在Composition Root中设置.对于Silverlight应用程序,它将是您的ApplicationStartup方法或像Caliburn.Micro中的专用引导程序.
此容器实例只调用一次以解析您的主视图或视图模型(取决于您首先使用视图还是首先使用viewmodel方法).
这应该是它.你不应该再次打电话给你的容器.如果一个类依赖于某个其他组件:使用构造函数注入注入该组件.如果该类需要创建其他对象:注入工厂.Unity有一个很好的功能叫做自动工厂
更新
如果它ViewModelLocator是您的基础架构的一部分,并且您从不直接在您的应用程序代码中使用它......也许.请参阅我对@ MikePost的问题的评论.
| 归档时间: |
|
| 查看次数: |
3276 次 |
| 最近记录: |