在我的应用程序中,有些情况下我的存储库需要将不同的参数传递给具体类型的构造函数。我希望能够做这样的事情:
var arg = (x == y) ? z : a;
ObjectFactory.GetInstance<IRepository>(arg);
根据某些条件,只能在创建 Repository 实例时构造参数。
如何才能做到这一点?
最佳答案
正如@Steven 还说的,我认为如果可能的话,您应该让需要依赖项(具有动态参数)的类将工厂作为参数,以便您可以控制使用者的创建。
使用结构映射,内置对此的支持,因此您无需构建工厂类。
让使用者将 Func 作为 ctor 参数并通过使用参数调用 Func 来创建存储库(依赖项):
public class Consumer
{
public Consumer(Func<ArgumentType, IRepository> repositoryFactory)
{
_repositoryFactory = repositoryFactory;
}
public void CallRepository()
{
ArgumentType arg = (x == y) ? z : a;
var repository = _repositoryFactory(arg);
repository.GetById(...);
}
}
在结构图的配置中,可以配置func:
For<Func<ArgumentType, IRepository>>().Use( arg => new Repository(arg));
关于.net - 构造新类型时如何将动态参数传递给 Structuremap?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6407205/