vb8334
چهارشنبه 03 اردیبهشت 1393, 13: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;
}
من یک برنامه مبتنی بر پلاگین نوشته ام اما مشکلی که دارم این هستش که 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;
}