我想使用需要参数的工厂方法在 Unity 容器中注册一个类型。这些参数将由统一解决,但仅限于运行时。
工厂方法代码:
public static IApp Create(IOne, ITwo) {...}
注册码:
container.RegisterType(typeof(IApp), new InjectionFactory(f => App.Create(???, ???)));
我需要什么来替换'???' ?
更多信息:
我的 Unity 配置分两个阶段进行。第一阶段(应用程序开始),我注册了我所有的对象,除了一个:
container.RegisterType<IOne, One>();
container.RegisterType<ITwo, Two>();
container.RegisterType<IApp, App>();
// ...
第二阶段(用户正在登录),我只是注册了一个上下文对象的实例,它在我所有类的构造函数中使用(One
,Two
,应用
, ...) :
var childContainer = container.CreateChildContainer();
childContainer.RegisterInstance<AppEnvironment>(new AppEnvironment(userName));
这是我没有使用 InjectionFactory 的代码。它工作正常。现在,我必须多次注册我的 IApp 接口(interface),每次都调用不同的静态方法。静态方法示例:
public static IApp Create(IOne one, ITwo two, AppEnvironment env)
{
_one = one;
_two = two;
_env = env;
}
如果我注册 IApp 这个代码:
container.Register(typeof(IApp), new InjectionFactory(f => App.Create(container.Resolve<IOne>(), container.Resolve<ITwo>(), container.Resolve<AppEnvironment>()));
那我的环境变量没有设置。
但是如果我注册我的 env 实例(只是为了测试目的,我不能这样做),它会起作用。
最佳答案
终于找到解决办法了。看起来像 willys one :
container.RegisterType<IApp, App>(
new InjectionFactory(
f => App.Create(
f.Resolve<IOne>(),
f.Resolve<ITwo>()
)
)
);
关于c# - Unity 与需要参数的工厂方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43390927/