使用StructureMap时传递构造函数参数
我正在为我的DI使用StructureMap。 想象一下,我有一个类需要1个参数,如:
public class ProductProvider : IProductProvider { public ProductProvider(string connectionString) { .... } }
当我得到一个IProductProvider的实例时,我需要在运行时指定“connectionString”。
我已经configuration了StructureMap,如下所示:
ForRequestedType<IProductProvider>.TheDefault.Is.OfConcreteType<ProductProvider>(). WithCtorArgument("connectionString");
不过,我不想在这里调用EqualTo(“something …”)方法,因为我需要一些工具来在运行时dynamic指定这个值。
我的问题是:如何通过使用ObjectFactory获得IProductProvider的实例?
目前,我有这样的东西:
ObjectFactory.GetInstance<IProductProvider>();
但是,如你所知,这是行不通的…
任何build议将不胜感激。
我build议用StructureMapconfiguration声明。 使用稍微更新的StructureMap代码:
For<IProductProvider>().Use<ProductProvider> .Ctor<string>("connectionString").Is(someValueAtRunTime);
通过这种方式,您不必担心客户端代码不必知道该值,并可以将IoCconfiguration与主代码分开。
我自己find了答案! 这是解决scheme:
ObjectFactory.With("connectionString").EqualTo(someValueAtRunTime).GetInstance<IProductProvider>();
希望这可以帮助那些遇到同样问题的人。