获取模块名称或标识

时间:2013-07-15 09:49:06

标签: c# unity-container prism

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

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

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

引导程序:

    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;
}

1 个答案:

答案 0 :(得分: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可以识别模块detecting the method the made the call