我正在尝试让Unity管理我的对象创建,并且我想有一些初始化参数,这些参数在运行时是未知的:
目前,我能想到的唯一方法是在接口上拥有一个Init方法。
interface IMyIntf {
void Initialize(string runTimeParam);
string RunTimeParam { get; }
}
那么在Unity中使用它,我会这样做:
var IMyIntf = unityContainer.Resolve<IMyIntf>();
IMyIntf.Initialize("somevalue");
在这种情况下,runTimeParam
参数是基于用户输入在运行时确定的。简单情况下,这里只需返回runTimeParam
的值,但实际上该参数将是文件名之类的内容,并且初始化方法将对文件执行某些操作。这会产生许多问题,即
Initialize
方法在接口上是可用的,可以被多次调用。在实现中设置一个标志并在重复调用 Initialize
时抛出异常似乎有点笨拙。在解析接口时,我不想知道关于
IMyIntf
的实现任何细节。但我所想要的是,该接口需要某些一次性初始化参数的知识。是否有一种方式可以通过注释(属性?)将此信息添加到接口中,并在创建对象时将其传递给框架?
runTimeParam
是一个依赖项,它根据用户输入在运行时确定。这种情况的替代方案应该是将其拆分为两个接口 - 一个用于初始化,另一个用于存储值吗? - Igor Zevaka