1

对于我的应用程序,我正在尝试编写配置控制器,以加载和保存某些模块的设置。为此,我将使用一个 INI 文件,其中部分名称将表示模块名称(或其他标识),而值则由键表示。

我在引导程序中注册了我的控制器,并使用我的构造函数中的接口在适当的类中注入。但是我不想每次需要获取或设置值时都输入模块名称,所以我尝试使用调用者信息来找出哪个模块(或类)正在调用该方法,但这显然不起作用(返回空字符串)。

还有另一种方法可以实现我想要做的事情吗?

引导程序:

    protected override void ConfigureContainer()
    {
        base.ConfigureContainer();

        Container.RegisterType<IConfig, ConfigController>(new ContainerControlledLifetimeManager());
    }

配置界面:

public interface IConfig
{
    string[] GetSettings(string caller = "");

    void Set<T>(string setting, T value, string caller = "") where T : class;
    T Get<T>(string setting, string caller = "") where T : class;
}
4

1 回答 1

1

调用者参数的使用容易出错。你有很多选择可以避免它:

  1. 为每个模块注册一个 ConfigController。Unity 支持多个命名注册。您可以在模块初始化时在每个模块中注入正确的控制器,或者使用Dependency属性:

           Container.Register<IConfig, ConfigController>("module1", 
                 new InjectionConstructor("module1"))
                    .Register<IConfig, ConfigController>("module2", 
                 new InjectionConstructor("module2"));
    
           class Module1 {
                public Module1([Dependency("module1")] IConfig config) {... }
           }
    
  2. 定义并实现返回配置的 IConfig 实现的 IConfigFactory。

        interface IConfigFactory { 
            IConfig Create(String moduleName); 
        }
    
  3. ConfigController 可以识别检测调用方法的模块。

于 2013-07-16T07:01:42.957 回答