C# 使用UNITY重写对象参数
我已经启动了一个项目,使用Injg MS Unity作为我的IOC容器,并且有两个关于覆盖参数的问题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
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});"