J'ai un événement comme celui-ci:Comment puis-je appeler dynamiquement une méthode en utilisant Namespace.Class en C#?
private void btnStartAnalysis_Click(object sender, EventArgs e)
{
SqlConnectionStringBuilder objConnectionString = new SqlConnectionStringBuilder();
objConnectionString.DataSource = txtHost.Text;
objConnectionString.UserID = txtUsername.Text;
objConnectionString.Password = txtPassword.Text;
objConnectionString.InitialCatalog = Convert.ToString(cmbDatabases.SelectedValue);
string[] arrArgs = { objConnectionString.ConnectionString };
//Checks for the selectedItem in the cmbOpearions dropdown and make call to appropriate functions.
string assemblyName = cmbOperations.SelectedValue.ToString();
Assembly assembly = Assembly.LoadFrom(assemblyName);
Type localType = assembly.GetType("PrimaryKeyChecker.PrimaryKeyChecker");
IMFDBAnalyserPlugin analyser = (IMFDBAnalyserPlugin) Activator.CreateInstance(localType);
string response = analyser.RunAnalysis(objConnectionString.ConnectionString);
//show the response of the the function call
txtPluginResponse.Text = response;
}
Je veux que cette ligne soit dynamique:
Type localType = assembly.GetType("PrimaryKeyChecker.PrimaryKeyChecker");
où PrimaryKeyChecker est un espace de noms et un autre PrimaryKeyChecker est la classe.
Mais je veux créer d'autres espaces de noms et classes, donc il y a un moyen de les appeler dynamiquement et de les charger dans la liste déroulante comme ceci.
public void SetOperationDropDown()
{
cmbOperations.DataSource = PluginManager.GetAllPlugins();
if(cmbOperations.Items.Count > 0)
{
cmbOperations.SelectedItem = cmbOperations.Items[0];
}
}
+1 pour MEF et ne pas réinventer la roue – Noctis