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");