Tôi đang gặp vấn đề về generics trong khi làm việc với bộ xử lý Dependency Injection chung (một Service Locator).Làm thế nào bạn có thể bỏ T vào một lớp để khớp với ràng buộc "nơi T: lớp"?
Sửa 1 (cho rõ ràng)
Được rồi vì vậy tôi thực sự sử dụng SimpleInjector như một resolver DI và nó có hạn chế lớp trên đó là phương pháp getInstance, vì vậy đây là một số mã hoàn chỉnh hơn:
public T GetInstance<T>() where T : class
{
try
{
// works
return _container.GetInstance<T>();
}
catch(ActivationException aEx)
{
return default(T);
}
}
public T GetInstance<T>()
{
try
{
if(typeof(T).IsClass)
{
// does not work, T is not a reference type
return _container.GetInstance<T>();
}
}
catch(ActivationException aEx)
{
return default(T);
}
}
chỉnh sửa 2 - mã cuối cùng vì nó trông lạ trong ý kiến:
public T GetInstance<T>()
{
try
{
if(typeof(T).IsClass)
{
return (T) _container.GetInstance(typeof(T));
}
}
catch(ActivationException aEx)
{
return default(T);
}
}
Có lẽ nếu chúng ta biết thêm về lý do tại sao bạn quan tâm trong việc này, ngoài một ví dụ rỗng trở về ...? Có thể là một cách tốt hơn để cấu trúc nó. –
Vui lòng xem chỉnh sửa 1 để biết lý do tôi muốn thực hiện việc này. – Laurence