আমি একটি নিয়ামকের কোনও ক্রিয়াকলাপে প্রবেশের পরে কোনও মডেল সমাধানের উপায় অনুসন্ধান করছি, সমস্যাটি বর্ণনা করার সহজ উপায় হ'ল:
public DTO[] Get(string filterName)
{
//How can I do this
this.Resolve<MyCustomType>("MyParamName");
}
আমি কেন চেষ্টা করছি সে সম্পর্কে আরও তথ্যের সন্ধান করা হলে আপনি পুরো ছবিটি পেতে পড়া চালিয়ে যেতে পারেন
টি এল; ডিআর
আমি কোনও পরামিতি নাম দিয়ে একটি মডেলকে একটি অনুরোধ সমাধানের একটি উপায় সন্ধান করছি, যা সর্বদা ক্যোয়ারী স্ট্রিং থেকে সমাধান করা হবে কীভাবে আমি প্রারম্ভ থেকেই ফিল্টারগুলিকে গতিশীলভাবে নিবন্ধ করতে পারি। আমার একটি ক্লাস রয়েছে যা আমার ফিল্টারগুলি নিবন্ধকরণ করতে চলেছে।
আমার স্টার্টআপ ক্লাসে আমি আমার বিশ্রাম সার্ভিসগুলির সাথে ফিল্টারগুলি গতিশীলভাবে নিবন্ধিত করতে সক্ষম হতে চাই। আমার কাছে একটি বিকল্প রয়েছে যা আমি আমার কাস্টম কন্ট্রোলার ফিচারপ্রভাইডারের কাছে যাচ্ছি যা দেখতে মোটামুটি এরকম দেখাচ্ছে:
public class DynamicControllerOptions<TEntity, TDTO>
{
Dictionary<string, Func<HttpContext, Expression<Func<TEntity, bool>>>> _funcNameToEndpointResolverMap
= new Dictionary<string, Func<HttpContext, Expression<Func<TEntity, bool>>>>();
Dictionary<string, List<ParameterOptions>> _filterParamsMap = new Dictionary<string, List<ParameterOptions>>();
public void AddFilter(string filterName, Expression<Func<TEntity, bool>> filter)
{
this._funcNameToEndpointResolverMap.Add(filterName, (httpContext) => filter);
}
public void AddFilter<T1>(string filterName, Func<T1, Expression<Func<TEntity, bool>>> filterResolver,
string param1Name = "param1")
{
var parameters = new List<ParameterOptions> { new ParameterOptions { Name = param1Name, Type = typeof(T1) } };
this._filterParamsMap.Add(filterName, parameters);
this._funcNameToEndpointResolverMap.Add(filterName, (httpContext) => {
T1 parameter = this.ResolveParameterFromContext<T1>(httpContext, param1Name);
var filter = filterResolver(parameter);
return filter;
});
}
}
আমার কন্ট্রোলার অপশনগুলি ট্র্যাক করে রাখবে এবং এগুলি প্যাজিং এন্ডপয়েন্টস এবং ওডেটার জন্য ফিল্টার সরবরাহ করতে ব্যবহার করবে।
public class DynamicControllerBase<TEntity, TDTO> : ControllerBase
{
protected DynamicControllerOptions<TEntity, TDTO> _options;
//...
public TDTO[] GetList(string filterName = "")
{
Expression<Func<TEntity, bool>> filter =
this.Options.ResolveFilter(filterName, this.HttpContext);
var entities = this._context.DbSet<TEntity>().Where(filter).ToList();
return entities.ToDTO<TDTO>();
}
}
এইচটিটিপি কনটেক্সট প্রদত্ত কোনও মডেলকে কীভাবে গতিশীলভাবে সমাধান করতে হবে তা বুঝতে আমার সমস্যা হচ্ছে, আমি মডেলটি পাওয়ার জন্য এই জাতীয় কিছু করার চিন্তা করব তবে এটি সিউডো কোড যা কাজ করে না
private Task<T> ResolveParameterFromContext<T>(HttpContext httpContext, string parameterName)
{
//var modelBindingContext = httpContext.ToModelBindingContext();
//var modelBinder = httpContext.Features.OfType<IModelBinder>().Single();
//return modelBinder.BindModelAsync<T>(parameterName);
}
উত্সে খননের পরে, আমি কিছু প্রতিশ্রুতিবদ্ধ জিনিসগুলি দেখেছি মডেলবাইন্ডফ্যাক্টরি এবং কন্ট্রোলার অ্যাকশনআইভোকার এই ক্লাসগুলি মডেল বাইন্ডিংয়ের জন্য পাইপলাইনে ব্যবহৃত হয়,
আমি কোয়েরিস্ট্রিং থেকে প্যারামিটারের নামটি সমাধান করার জন্য একটি সাধারণ ইন্টারফেসটি প্রকাশ করার আশা করব, এরকম কিছু:
ModelBindingContext context = new ModelBindingContext();
return context.GetValueFor<T>("MyParamName");
যাইহোক, আমি মডেল বাইন্ডার থেকে কোনও মডেল সমাধান করার একমাত্র উপায় হ'ল নকল নিয়ন্ত্রণকারী বর্ণনাকারী তৈরি করা এবং প্রচুর পরিমাণে জিনিস উপহাস করা।
আমি কীভাবে আমার কনটোলারের মধ্যে দেরীতে আবদ্ধ প্যারামিটারগুলি গ্রহণ করতে পারি?