Hvordan kan jeg legge til en verdi som er lagret i web.config til en klasse attributt i C # (fra web config-filen ikke ressursfilen)

stemmer
-1
public static class trial                 
{               
    public static string LUIS_MODEL_ID=ConfigurationManager.AppSettings[ID];  
    public static string LUIS_SUBSCRIPTION_KEY =ConfigurationManager.AppSettings[KEY];

    [LuisModel(LUIS_MODEL_ID, LUIS_SUBSCRIPTION_KEY)]  // An attribute argument must be a constant expression     
    [Serializable]            
    public class DialogLuis : LuisDialog<object>
    {                         

Dette er den feilen jeg får:

Et attributt argumentet må være en konstant uttrykk

Er det en annen måte å passere en verdi fra Web.config til LuisModel attributt?

Publisert på 19/01/2017 klokken 10:14
kilden bruker
På andre språk...                            


3 svar

stemmer
2

Du kan opprette en base klasse som vil få disse verdiene fra web.config og instantiate LuisDialog:

namespace ChatBot_LUIS.Dialogs
{
    [Serializable]
    public class BaseLuisDialog<T> : LuisDialog<T>
    {
        public BaseLuisDialog() : base(GetNewService())
        {

        }

        private static ILuisService[] GetNewService()
        {
            var modelId = ConfigurationManager.AppSettings.Get("LuisModelId");
            var subscriptionKey = ConfigurationManager.AppSettings.Get("LuisSubscriptionKey");
            var staging = Convert.ToBoolean(ConfigurationManager.AppSettings.Get("LuisStaging") ?? "false");
            var luisModel = new LuisModelAttribute(modelId, subscriptionKey, staging: staging);
            return new ILuisService[] { new LuisService(luisModel) };
        }
    }
}

Så i koden din bør du bruke denne basen klassen for alle din Luis Dialoger og fjerne LuisModelAttributehelt. Eksempel:

public class RootLuisDialog : BaseLuisDialog<object>
    {
    ....
    }
Svarte 09/06/2017 kl. 12:09
kilden bruker

stemmer
0

Du kan også arve fra LuisModelAttribute:

[Serializable]
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method | AttributeTargets.Interface, AllowMultiple = true)]
public class ConfiguredLuisModelAttribute : LuisModelAttribute, ILuisModel
{
    public ConfiguredLuisModelAttribute() : base(
        GetModelId(), 
        GetSubscriptionKey(), 
        LuisApiVersion.V2,
        staging: GetStaging()) { }

    private static string GetModelId()
    {
        return ConfigurationManager.AppSettings.Get("LuisModelId");
    }

    private static string GetSubscriptionKey()
    {
        return ConfigurationManager.AppSettings.Get("LuisSubscriptionKey");
    }

    private static bool GetStaging()
    {            
        return Convert.ToBoolean(ConfigurationManager.AppSettings.Get("LuisStaging") ?? bool.FalseString);
    }
Svarte 24/07/2017 kl. 14:21
kilden bruker

stemmer
-2

Du kan prøve å legge til parametre i web.config

<appSettings>
<add key="SitePath" value="http://example.com/" />

etter at du kan få parameter ved

ConfigurationManager.AppSettings["SitePath"].ToString()
Svarte 19/01/2017 kl. 10:29
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more