मैं दो इंटरफेस है:पंजीयन 'आधा बंद किए गए' वंशावली घटक
public interface IQuery<TResult> { }
public interface IQueryHandler<in TQuery, out TResult>
where TQuery : IQuery<TResult>
{
TResult Handle(TQuery q);
}
IQueryHandler की एक बंद कार्यान्वयन का एक उदाहरण:
public class EventBookingsHandler : IQueryHandler<EventBookings, IEnumerable<EventBooking>>
{
private readonly DbContext _context;
public EventBookingsHandler(DbContext context)
{
_context = context;
}
public IEnumerable<EventBooking> Handle(EventBookings q)
{
return _context.Set<MemberEvent>()
.OfEvent(q.EventId)
.AsEnumerable()
.Select(EventBooking.FromMemberEvent);
}
}
मैं रजिस्टर और साथ IQueryHandler<,>
के बंद सामान्य कार्यान्वयन हल कर सकते हैं यह घटक पंजीकरण:
Classes.FromAssemblyContaining(typeof(IQueryHandler<,>))
.BasedOn(typeof(IQueryHandler<,>))
.WithServiceAllInterfaces()
हालांकि मैं क्या करना चाहता हूं
public class GetById<TEntity> : IQuery<TEntity> where TEntity : class, IIdentity
{
public int Id { get; private set; }
public GetById(int id)
{
Id = id;
}
}
public class GetByIdHandler<TEntity> : IQueryHandler<GetById<TEntity>, TEntity> where TEntity : class, IIdentity
{
private readonly DbContext _context;
public GetByIdHandler(DbContext context)
{
_context = context;
}
public TEntity Handle(GetById<TEntity> q)
{
return _context.Set<TEntity>().Find(q.Id);
}
}
जब मैं IQueryHandler<GetById<Event>, Event>
को हल करने की कोशिश की है कि मैं इस अपवाद मिल गया:
प्रकार का एक अपवाद एक खुला सामान्य कार्यान्वयन जाता है कि "आधा बंद कर दिया" (यानी एक सामान्य
TQuery
प्रकार पैरामीटर निर्दिष्ट करता है) को हल है 'Castle.MicroKernel.Handlers.GenericHandlerTypeMismatchException' Castle.Windsor.dll में हुआ था लेकिन उपयोगकर्ता कोडअतिरिक्त जानकारी: प्रकार Queries.GetById'1 [[मॉडल। इवेंट, डोमेन, संस्करण = 1.0.0.0, संस्कृति = तटस्थ, PublicKeyTok en = null]], मॉडल। इवेंट कार्यान्वयन प्रकार की सामान्य बाधाओं को पूरा नहीं करते हैं Query.GetByIdHandler'1 घटक 'Queries.GetByIdHandler'1'। यह आपके कोड में एक बग की संभावना है।
ऐसा लगता है कि प्रकार सफलतापूर्वक पंजीकृत किया गया है, और बाधाओं जहाँ तक मैं बता सकता हूँ संतुष्ट हैं (Event
एक वर्ग है और IIdentity
लागू करता है)। मुझे यहां क्या समझ नहीं आ रहा है? क्या मैं ऐसा कुछ करने की कोशिश कर रहा हूं जो विंडसर का सामना नहीं कर सकता?
धन्यवाद, ऐसा लगता है कि इस विंडसर के साथ कोई समस्या – AlexFoxGill
मैं आगे की जांच की है है तो और मुझे लगता है कि आप कर रहे हैं ठीक है तो यह सही answe है आर: विंडसर ऐसा नहीं कर सकता है। सरल इंजेक्टर मेरी परियोजना के लिए बेहतर और बेहतर दिख रहा है – AlexFoxGill