![](/img/trans.png)
[英]How do I use a Class Library (Package) in a Console Application (Package)
[英]Should I define methods as static in class library to use in Console Application
場景 :我有一個控制台應用程序,它引用了幾個類庫。 ClassLibEmployee從SQL數據庫中提取數據並返回一個List。 我需要遍歷Employee的列表,並將其發送到WebAPI並使用狀態更新SQL DB。 我創建了ClassLibPay ,它是WebAPI的包裝。
ClassLibEmployee.EmployeeData ed = new ClassLibEmployee.EmployeeData();
var elist = ed.PullEmployees();
foreach (Employee e in elist) {
bool stat = ClassLibPay.ServiceWrap.Sendtopay(e.Id, e.Name, e.Pay, e.ExemptFlag, e.Hours);
ed.ChageStatus(e.Id, e.Name, e.Pay, e.ExemptFlag, e.Hours, stat);
}
public class EmployeeData
public static class ServiceWrap
問題:
因為我將在EmployeeData中為每個雇員調用ChangeStatus方法,所以那應該是靜態類嗎?
ServiceWrap正在調用服務,是否有辦法避免為每個Sendtopay調用創建服務實例?
控制台應用程序 - 引用ClassLibEmployee
public class EmployeeData
{
public List<Employee> PullEmployees()
{
}
}
ConsoleApp-參考ClassLibPay-ClassLibPay調用WebAPI
public static class ServiceWrap
{
public static bool Sendtopay(int id, string name, decimal pay, bool flg, int hours)
{
using (EDataSvc service = new EDataSvc())
{
service.serviceMethod(id,name,pay,flg,hours);
}
}
}
為了避免創建每個時間類,您絕對應該像Michael所說的那樣使用DI方法。
這是一個非常簡單的示例,說明如何在基於Autofac庫的控制台應用程序中使用DI。 在下面,我們有Main console應用程序和兩個類,其中一個是我們的包裝器(也許您想准備數據,而eDataService應該將數據發送到后端。我們將這兩個類都注冊為PerLifeTimeScope(在這里,這是單例的-在如果我們從DI容器中獲得一個實例,則只有一個實例。當然,您可以選擇已集成了DI容器的現成框架。
class MainClass
{
public static void Main(string[] args)
{
Console.WriteLine("Hello World!");
var builder = new ContainerBuilder();
builder.RegisterType<MyService>().As<IMyService>().InstancePerLifetimeScope();
builder.RegisterType<EDataSvc>().InstancePerLifetimeScope();
var container = builder.Build();
using (var scope = container.BeginLifetimeScope())
{
var service = scope.Resolve<MyService>();
service.MakeRequestAsync("test");
}
}
}
public class EDataSvc
{
public void SendRequestAsync()
{
//TODO:Send request
}
}
public class MyService : IMyService
{
private EDataSvc _eDataService;
public void MakeRequestAsync(EDataSvc eDataSvc)
{
_eDataService = eDataSvc;
}
public void MakeRequestAsync(string parameter)
{
//TODO prepare your data or additional logic
_eDataService.SendRequestAsync();
}
}
public interface IMyService
{
void MakeRequestAsync(string parameter);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.