Chỉ trong trường hợp ai đó quan tâm, tôi đã thực hiện một phương pháp mở rộng làm cho cú pháp để giải quyết bằng cách sử dụng ParameterOverride
dễ đọc hơn một chút. Phương pháp này là như sau:
public static class UnityExtensions
{
public static T Resolve<T>(this IUnityContainer container, object parameterOverrides)
{
var properties = parameterOverrides
.GetType()
.GetProperties(BindingFlags.Public | BindingFlags.Instance);
var overridesArray = properties
.Select(p => new ParameterOverride(p.Name, p.GetValue(parameterOverrides, null)))
.Cast<ResolverOverride>()
.ToArray();
return container.Resolve<T>(null, overridesArray); //null needed to avoid a StackOverflow :)
}
}
Với điều này, bạn có thể viết lại ví dụ ParameterOverride như sau:
var service = container.Resolve<IConcreteService>(new {val=3});
Tôi hy vọng điều này rất hữu ích cho ai đó ...
Cảm ơn câu trả lời tuyệt vời. +1 – Vadim
Đây là một trợ giúp tuyệt vời. Rất tốt giải thích. –
+1 Giải thích hoàn hảo! –