C# 使用Unity更改构造函数注入的字符串参数
我的目标是改变字符串参数:C# 使用Unity更改构造函数注入的字符串参数,c#,dependency-injection,unity-container,C#,Dependency Injection,Unity Container,我的目标是改变字符串参数: Container .RegisterInstance<string>("us", @"\\ad1\accounting$\Xml\qb_us.xml") .RegisterInstance<string>("intl", @"\\ad1\accounting$\Xml\qb_intl.xml"); driver = Container.Resolve<LoaderDriver>(args[1]); // "us" or "i
Container
.RegisterInstance<string>("us", @"\\ad1\accounting$\Xml\qb_us.xml")
.RegisterInstance<string>("intl", @"\\ad1\accounting$\Xml\qb_intl.xml");
driver = Container.Resolve<LoaderDriver>(args[1]); // "us" or "intl"
这显然是错误的,但这是我让它工作的唯一方法:
if (args[1] == "us")
Container
.RegisterType<LoaderInputReader>(
new InjectionConstructor(
@"\\ad1\accounting$\Xml\qb_us.xml",
new ResolvedParameter<Company>(),
new ResolvedParameter<eTargets>()
)
)
;
else if (args[1] == "intl")
Container
.RegisterType<LoaderInputReader>(
new InjectionConstructor(
@"\\ad1\accounting$\Xml\qb_intl.xml",
new ResolvedParameter<Company>(),
new ResolvedParameter<eTargets>()
)
)
;
else
throw new Exception("invalid company");
driver = Container.Resolve<LoaderDriver>();
container
.RegisterType<LoaderInputReader>(
"us",
new InjectionConstructor(
@"\\ad1\accounting$\Xml\qb_us.xml",
new ResolvedParameter<Company>(),
new ResolvedParameter<eTargets>()));
container
.RegisterType<LoaderInputReader>(
"intl",
new InjectionConstructor(
@"\\ad1\accounting$\Xml\qb_intl.xml",
new ResolvedParameter<Company>(),
new ResolvedParameter<eTargets>()));
if(args[1]=“us”)
容器
.RegisterType(
新注入构造函数(
@“\\ad1\accounting$\Xml\qb_us.Xml”,
新的ResolvedParameter(),
新的ResolvedParameter()
)
)
;
else if(args[1]=“intl”)
容器
.RegisterType(
新注入构造函数(
@“\\ad1\accounting$\Xml\qb_intl.Xml”,
新的ResolvedParameter(),
新的ResolvedParameter()
)
)
;
其他的
抛出新异常(“无效公司”);
driver=Container.Resolve();
也许您可以更改
driver = Container.Resolve<LoaderDriver>(args[1]); // "us" or "intl"
driver=Container.Resolve(args[1]);//“美国”或“国际”
与
driver=Container.Resolve(Container.Resolve(args[1]))
这充分利用了,在您的案例中,名称来自您的论点。类似的内容应该适用:
if (args[1] == "us")
Container
.RegisterType<LoaderInputReader>(
new InjectionConstructor(
@"\\ad1\accounting$\Xml\qb_us.xml",
new ResolvedParameter<Company>(),
new ResolvedParameter<eTargets>()
)
)
;
else if (args[1] == "intl")
Container
.RegisterType<LoaderInputReader>(
new InjectionConstructor(
@"\\ad1\accounting$\Xml\qb_intl.xml",
new ResolvedParameter<Company>(),
new ResolvedParameter<eTargets>()
)
)
;
else
throw new Exception("invalid company");
driver = Container.Resolve<LoaderDriver>();
container
.RegisterType<LoaderInputReader>(
"us",
new InjectionConstructor(
@"\\ad1\accounting$\Xml\qb_us.xml",
new ResolvedParameter<Company>(),
new ResolvedParameter<eTargets>()));
container
.RegisterType<LoaderInputReader>(
"intl",
new InjectionConstructor(
@"\\ad1\accounting$\Xml\qb_intl.xml",
new ResolvedParameter<Company>(),
new ResolvedParameter<eTargets>()));
您可以说:container.RegisterType(“us”,new InjectionConstructor(string,typeof(Company),typeof(eTargets)),从而稍微简化这一点;如果要解析命名依赖项,只需要显式使用ResolvedParameter。
var us = container.Resolve<LoaderInputReader>("us");
var intl = container.Resolve<LoaderInputReader>("intl");