这是一个更通用的答案,但与其直接注入字符串,不如创建一个接口、一个提供程序并注入提供程序本身是一个更好的主意。因此,将来,如果您需要更改读取和创建字符串的方式,那会更容易。(假设您今天从 app.config 中读取它,但随后您决定将其存储在 DB 中,或者从注册表中读取它,或者从 Web 请求中传递它。)示例应用程序:
public interface IMachineIdProvider
{
//Assume we are returning a machine Id.
String ResolveMachineId();
}
并实施。假设我们正在从 webconfig 中读取它
public class MachineIdProvider : IMachineIdProvider
{
private string _machineId;
public string ResolveMachineId()
{
if (String.IsNullOrEmpty(_machineId))
{
this._machineId= ConfigurationManager.AppSettings["MachineId"];
}
return this._machineId;
}
}
并以这种方式注入:
kernel.Bind<IMachineIdProvider>().To<MachineIdProvider>().InSingletonScope();
用接口声明类
public class MyWonderfulController : BaseController
{
private IMachineIdProvider _machineIdProvider;
public MyWonderfulController(IMachineIdProvider machineIdProvider)
{
this._machineIdProvider = machineIdProvider;
}
}
因此,无论您需要在哪里使用它,都可以调用
var id = _machineIdProvider.ResolveMachineId()
这样,如果你改变获取字符串的方式,你只需要改变方法本身或者创建另一个注入。