使用StructureMap使用运行时构造函数参数创建对象

时间:2016-11-06 21:14:40

标签: c# dependency-injection structuremap

我在我的小项目中使用StructureMap。我有一个类需要使用可以由StructureMap(Bar)轻松传递的类实例来构造,但构造函数参数包含一些事先不知道的参数。

class Bar { }

class Foo
{
    public Foo(string magic, Bar bar) { }
}

所以在我的代码中我需要获取Foo的实例。在这段代码中,我知道magic的期望值。 我应该如何创建我的Foos?

我现在正在做的是我通常创建一个工厂,注入IContainer并使CreateFoo方法接受运行时已知的内容。

class FooFactory
{
    private readonly IContainer _container;

    public FooFactory(IContainer container)
    {
        _container = container;
    }

    public Foo CreateFoo(string magic)
    {
        return _container.With("magic").EqualTo(magic).GetInstance<Foo>();
    }
}

我在需要创建新FooFactory的任何地方注入Foo,我的课程不需要知道Foo究竟是如何制作的。

我知道我可以在没有工厂的情况下注入IContext并创建Foos,但是当构造代码变得更复杂并且需要复制时,它看起来很臭。

工厂以外的其他替代品是什么?

1 个答案:

答案 0 :(得分:1)