tôi là tạo ra các trường hợp của một kiểu generic sử dụng phản ánh:Đúc trường hợp loại generic tạo sử dụng Reflection
public interface IModelBuilder<TModel>
{
TModel BuildModel();
}
public class MyModel
{
public string Name { get; set; }
}
public class MyModelBuilder : IModelBuilder<MyModel>
{
public MyModel BuildModel()
{
throw new NotImplementedException();
}
}
Khi chạy tất cả chúng ta đều biết là Loại mô hình ví dụ MyModel
. Tôi có thể tìm thấy trường hợp của những người xây dựng mô hình liên quan như sau:
var modelBuilders = from t in Assembly.GetExecutingAssembly().GetTypes()
from i in t.GetInterfaces()
where i.IsGenericType
&& i.GetGenericTypeDefinition() == typeof(IModelBuilder<>)
&& i.GetGenericArguments()[0] == modelType
select t;
var builder = Activator.CreateInstance(modelBuilders.First());
Nhưng tôi không chắc chắn làm thế nào tôi có thể sau đó cast dụ như IModelBuilder<TModel>
vì vậy tôi có thể gọi và làm việc với các kết quả của BuildModel()
.
Tôi có cảm giác đây là trường hợp. Tôi nghĩ rằng tùy chọn 2 sẽ làm việc tốt nhất cho tôi vì tôi cần phải làm việc với các thuộc tính trên mô hình đã được tạo ra. –
@Ben nếu bạn cần thực hiện một số lượng công việc không nhỏ, bạn cũng có thể * làm điều này với một phương thức chung, rằng bạn * gọi qua phản xạ *, tức là trong phương thức chung của '' nó là 'IModelBuilder '. Bạn có muốn một ví dụ về điều đó không? –
đẹp! Và rất lén lút :) –