C# 获取模块名称或标识

C# 获取模块名称或标识,c#,unity-container,prism,C#,Unity Container,Prism,对于我的应用程序,我试图编写一个配置控制器,以加载和保存某些模块的设置。为此,我将使用一个INI文件,其中节名称将表示模块名称(或其他标识),以及由键表示的值 我在引导程序中注册了控制器,并使用构造函数中的接口在适当的类中进行注入。但是,我不希望每次需要获取或设置值时都输入模块名,因此我尝试使用调用方信息来找出调用该方法的模块(或类),但这显然不起作用(返回空字符串) 有没有其他方法可以实现我的目标 引导程序: protected override void ConfigureConta

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

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

有没有其他方法可以实现我的目标

引导程序:

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

        Container.RegisterType<IConfig, ConfigController>(new ContainerControlledLifetimeManager());
    }
protected override void ConfigureContainer()
{
base.ConfigureContainer();
RegisterType(新的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;
}
公共接口IConfig
{
字符串[]获取设置(字符串调用者=”);
void Set(字符串设置,T值,字符串调用者=”),其中T:class;
T Get(字符串设置,字符串调用者=”),其中T:class;
}

调用方参数的使用容易出错。您有许多选择来避免它:

  • 为每个模块注册一个ConfigController。Unity支持多个命名注册。您可以在模块初始化中的每个模块中插入正确的控制器,或使用
    依赖项
    属性:

           Container.Register<IConfig, ConfigController>("module1", 
                 new InjectionConstructor("module1"))
                    .Register<IConfig, ConfigController>("module2", 
                 new InjectionConstructor("module2"));
    
           class Module1 {
                public Module1([Dependency("module1")] IConfig config) {... }
           }
    
  • ConfigController可以识别模块


  • 调用方参数的使用容易出错。您有许多选择来避免它:

  • 为每个模块注册一个ConfigController。Unity支持多个命名注册。您可以在模块初始化中的每个模块中插入正确的控制器,或使用
    依赖项
    属性:

           Container.Register<IConfig, ConfigController>("module1", 
                 new InjectionConstructor("module1"))
                    .Register<IConfig, ConfigController>("module2", 
                 new InjectionConstructor("module2"));
    
           class Module1 {
                public Module1([Dependency("module1")] IConfig config) {... }
           }
    
  • ConfigController可以识别模块


  • 我决定使用第一个建议,它就像一个魅力!仍在尝试在boostrapper中注册控制器,而不是在模块本身中注册,但在初始化之前似乎无法在DirectoryModuleCatalog中获取模块。无论如何,非常感谢,这肯定让我回到正轨:)我决定使用第一个建议,它就像一个魅力!仍在尝试在boostrapper中注册控制器,而不是在模块本身中注册,但在初始化之前似乎无法在DirectoryModuleCatalog中获取模块。无论如何,非常感谢,这确实让我回到了正轨:)