PDA

View Full Version : تعیین یک ساختار مناسب برای تمام پلاگین ها؟



vb8334
چهارشنبه 03 اردیبهشت 1393, 12:34 عصر
سلام دوستان

من یک برنامه مبتنی بر پلاگین نوشته ام اما مشکلی که دارم این هستش که 2 تا پلاگین از ورودی متد run لیستی از مشتری ها میگیرن
اما پلاگین سومی که دارم مینویسم فقط یک مشتری میگیره .

مشکل اینجاست که من در interface IAction متد Run رو به صورت لیستی از مشتری ها در نظر گرفته ام و حالا نمیدونم برای پلاگین سوم چطور فقط یک مشتری بفرستم.

کد رو هم میزارم:

namespace PluginDatabase.Defention{
public interface IPlugin
{
string Name { get; }


List<IAction> Actions { get; }


}
}


namespace PluginDatabase.Defention{
public interface IAction
{
string Name { get; }


void Run(List<Customer> customers);




}
}

کد host :



private void Form1_Load(object sender, EventArgs e)
{


int x = 250;
int y = 342;
var dlls = Directory.GetFiles(@"Plugins\", "*.dll");
foreach (var dll in dlls)
{


var asmbli = Assembly.LoadFrom(dll);
foreach (var typee in asmbli.GetTypes())
{
if (typee.GetInterface("IPlugin") != null)
{
var plugin = Activator.CreateInstance(typee) as IPlugin;



foreach (var action in plugin.Actions)
{

var actionButton = new Button();
actionButton.Text = action.Name;

actionButton.Click += (ss, ee) =>
{

action.Run(getCustomers());

};
actionButton.Location=new Point(x,y);
actionButton.Size = new Size(100, 43);
this.Controls.Add(actionButton);
x-= 110;

}
}

}


}
}


List<Customer> getCustomers()
{
var custoomers = new List<Customer>
{
new Customer{Id = 1,Age=20,Debit = 20,Mail = "asdasd@yahoo.com",Name = "eeeeeeeeee"},
new Customer{Id = 2,Age=15,Debit = 20,Mail = "xxx@yahoo.com",Name = "ggggggg"},
new Customer{Id = 3,Age=30,Debit = 300,Mail = "ffff@yahoo.com",Name = "aaaa"},
new Customer{Id = 4,Age=50,Debit = 5000,Mail = "aaaa@yahoo.com",Name = "sdsd"},
new Customer{Id = 5,Age=33,Debit = 0,Mail = "ssdsd@yahoo.com",Name = "sdddd"},
new Customer{Id = 6,Age=60,Debit = 2,Mail = "asdasdasd@yahoo.com",Name = "shima"},
new Customer{Id = 7,Age=17,Debit = 0,Mail = "vvvvv@yahoo.com",Name = "dddd"},


};
dtg.DataSource = custoomers;
return custoomers;
}