使用UNITY覆盖对象参数

使用UNITY覆盖对象参数

问题描述:

我已经开始一个项目usinjg MS Unity作为我的IOC容器,并且有两个关于覆盖参数的问题。使用UNITY覆盖对象参数

public interface ITab 
{ 
    bool AllowVisible {get;set;} 
} 

class Tab : ITab 
{ 
    IViewModel vm; 

    public Tab(IViewModel vm) 
    { 
    this.vm = vm; 
    } 

    public bool allowVisible = false; 

    public bool AllowVisible 
    { 
    get{ return allowVisible}; 
    set{ allowVisible = vlaue}; 
    } 
} 

public interface IViewModule 
{ 
    string Name; 
} 

public class ViewModel 
{ 
    public string Name; 
} 

1)如何设置了团结的标签类型,这样我就可以在真或假传递给AllowVisible财产作为paramater?我不想要添加 附加行tab.AllowVisible = true;如下

void Main() 
{ 
    ITab tab = unityContainer.RegisterType<ITab, Tab>(); 
    tab.AllowVisible = true; 
} 

2)的情况下,如果我已经有视图模型的实例,例如VM在下面的情况下,如何使该容器解决标签对象而将vm对象传递给它的构造函数?目前,当我解决了标签对象时,容器创建视图模型的另一个实例。 我想让vm实例用作tab对象viewmodel?

void Main() 
{ 
    unityContainer.RegisterType<IViewModel, ViewModel>(); 
    unityContainer.RegisterType<ITab, Tab>(); 

    ViewModel vm = unityContainer.Resolve<IViewModel>(); 
    ITab tab = unityContainer.RegisterType<ITab, Tab>(); 
} 

如果你想自动将值分配给您的ITAB实施AllowVisible财产,那么你可以使用统一提供的InjectionProperty type

你可以说一口流利的方式做到这一点,例如:

IUnityContainer myContainer = new UnityContainer(); 
myContainer.Configure<InjectedMembers>() 
      .ConfigureInjectionFor<MyObject>(
       new InjectionProperty("MyProperty"), 
       new InjectionProperty("MyStringProperty", "SomeText")) 
); 

有点混凝土:

container.RegisterType<ITab, Tab>(); 
container.RegisterType<ITab, Tab>(
    new InjectionProperty("AllowVisible", true) 
); 

有关如何注入构造函数的参数,属性值的详细信息...等检查:

http://msdn.microsoft.com/en-us/library/ff650036.aspx

对于塞科当你解决一个ITab的实现时,你必须将构造函数参数(IViewModel)传递给Unity的Resolve(...)方法。

这个问题已经被问过的SO,退房:

Can I pass constructor parameters to Unity's Resolve() method?

为了完整性:

var viewModel = container.Resolve<IViewModel>(); 
container.Resolve<ITab>(new ParameterOverrides<Tab> { { "vm", viewModel} });"