首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Autofac中在运行时定义嵌套对象的值

如何在Autofac中在运行时定义嵌套对象的值
EN

Stack Overflow用户
提问于 2014-09-08 23:14:50
回答 2查看 184关注 0票数 2

假设我有以下层次结构。

代码语言:javascript
复制
class PersonWithJacket
{
    public PersonWithJacket(Jacket jacket)
    {
    }
}

class Jacket
{
    public Jacket(string brand)
    {
    }
}

我在Autofac容器中注册了这些类。

代码语言:javascript
复制
        containerBuilder.RegisterType<PersonWithJacket>();
        containerBuilder.RegisterType<Jacket>();

在运行时,我希望解析一个PersonWithJacket对象,并定义嵌套Jacket类的string brand构造函数参数。我的第一种方法是像这样使用NamedParameter

代码语言:javascript
复制
        var personWithJacket = container.Resolve<PersonWithJacket>(new NamedParameter("brand", "TheBrand"));

我将其解读为“解析PersonWithJacket对象,如果遇到名为”TheBrand“的构造函数参数,请使用值'TheBrand'”,但字符串参数无法解析。

是否有方法在运行时定义嵌套对象的构造函数参数的值?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-09-11 01:35:10

这样做的方法似乎是使用容器层次结构。我创建一个基本容器,在其中注册所有公共类型和实例,然后创建注册不同部分的子容器。

代码语言:javascript
复制
var containerBuilder = new ContainerBuilder();
containerBuilder.RegisterType<PersonWithJacket>();

var childContainer1 = new MultitenantContainer(new NullTenantIdStrategy(), containerBuilder.Build());
childContainer1.ConfigureTenant(null, builder => builder.Register(context => new Jacket("Hugo Boss")));

var childContainer2 = new MultitenantContainer(new NullTenantIdStrategy(), containerBuilder.Build());
childContainer2.ConfigureTenant(null, builder => builder.Register(context => new Jacket("H&M")));

var personWithHugoBossJacket = childContainer1.Resolve<PersonWithJacket>();
var personWithHandMJacket = childContainer2.Resolve<PersonWithJacket>();
票数 1
EN

Stack Overflow用户

发布于 2014-09-09 00:45:20

哦,算了。对于ResolvedParameter来说,这并没有那么糟糕。

代码语言:javascript
复制
        using (var scope = container.BeginLifetimeScope()) {
            var someDynamicString = "Brand B";

            var personDude = scope.Resolve<PersonWithJacket>(new ResolvedParameter(
                (pi, ctx) => pi.ParameterType == typeof(Jacket),
                (pi, ctx) => ctx.Resolve<Jacket>(new NamedParameter("name", someDynamicString))));
        }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25734469

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档