C# 使用UNITY重写对象参数

C# 使用UNITY重写对象参数,c#,unity-container,ioc-container,C#,Unity Container,Ioc Container,我已经启动了一个项目,使用Injg MS Unity作为我的IOC容器,并且有两个关于覆盖参数的问题 public interface ITab { bool AllowVisible {get;set;} } class Tab : ITab { IViewModel vm; public Tab(IViewModel vm) { this.vm = vm; } public bool allowVisible = false; public b

我已经启动了一个项目,使用Injg MS Unity作为我的IOC容器,并且有两个关于覆盖参数的问题

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) 如何设置unity中的选项卡类型,以便将true或false作为参数传递给AllowVisible属性?我不想添加 tab.AllowVisible的附加行=true如下例所示

void Main()
{
   ITab tab = unityContainer.RegisterType<ITab, Tab>(); 
   tab.AllowVisible = true;
}
void Main()
{
ITab tab=unityContainer.RegisterType();
tab.AllowVisible=true;
}
2) 如果我已经有了ViewModel的一个实例,例如下面的例子中的vm,那么在将vm对象传递到其构造函数中时,如何使容器解析选项卡对象?当前,当我解析选项卡对象时,容器会创建ViewModel的另一个实例我希望vm实例用作选项卡对象viewmodel?

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

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

如果您想自动为ITab实现的AllowVisible属性赋值,则可以使用Unity提供的

您可以流畅地执行此操作,例如:

IUnityContainer myContainer = new UnityContainer();
myContainer.Configure<InjectedMembers>()
           .ConfigureInjectionFor<MyObject>(
               new InjectionProperty("MyProperty"),
               new InjectionProperty("MyStringProperty", "SomeText"))
);
IUnityContainer myContainer=newunitycontainer();
myContainer.Configure()
.ConfigureInjectionFor(
新InjectionProperty(“MyProperty”),
新的InjectionProperty(“MyStringProperty”、“SomeText”))
);
更具体一点:

container.RegisterType<ITab, Tab>();
container.RegisterType<ITab, Tab>(
    new InjectionProperty("AllowVisible", true) 
);
container.RegisterType();
container.RegisterType(
新的InjectionProperty(“AllowVisible”,true)
);
有关如何注入构造函数参数、属性值等的更多信息,请查看:

至于问题的第二部分,在解析ITab的实现时,必须将构造函数参数(IViewModel)传递给Unity的Resolve(…)方法

这个问题以前被问过,所以,请查看:

为完整起见:

var viewModel = container.Resolve<IViewModel>();
container.Resolve<ITab>(new ParameterOverrides<Tab> { { "vm", viewModel} });"
var viewModel=container.Resolve();
Resolve(新参数覆盖{{“vm”,viewModel});"