我想使用需要参数的工厂方法在 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
, App
, ...) :
var childContainer = container.CreateChildContainer();
childContainer.RegisterInstance<AppEnvironment>(new AppEnvironment(userName));
这是我的代码,没有使用 InjectionFactory。效果很好。现在,我必须多次注册我的 IApp 接口,每次调用不同的静态方法。静态方法示例:
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 实例(仅出于测试目的,在我的情况下我不能这样做),它就可以工作。