IoC、特にCastle Windsorを初めて使用しています。私はこのようになりますどのeventpublisherのためのコンポーネントを登録しようとしている:Castle Windsor - イベントハンドラーの登録コンポーネント
container.Register(Component.For<IEventPublisher>().ImplementedBy<EventPublisher>());
私は上記のコンテナ・レジスタ・コードが正しいことを確信しているが、私は言う、別のエラーメッセージが表示されます。
ことができますコンポーネント 'Network.Infrastructure.Event.EventPublisher'を作成する必要があります.Network.Infrastructure.Event.EventPublisherは次の依存関係を待機しています。 - Service 'System.Collections.Generic.IEnumerable`1 [ [Network.Infrastructure.Event.IEventListener、Network.Infrastructure、Version = 1.0.0.0、Culture = neutral、PublicKeyToken = null]] 'が登録されていませんでした。
私はIEventListenerを登録しようとしましたが、運がありません。
ArticleService.cs
public class ArticleService : IArticleService
{
private readonly IArticleRepository _articleRpRepository;
private readonly IUnitOfWork _unitOfWork;
**Declaring the field for IEventPublisher**
private readonly IEventPublisher _eventPublisher;
public ArticleService(IArticleRepository articleRpRepository, IUnitOfWork unitOfWork, IEventPublisher eventListener)
{
_articleRpRepository = articleRpRepository;
_eventPublisher = eventListener;
_unitOfWork = unitOfWork;
}
public Article CreateArticle(Article article)
{
**Using the publish from eventpublish class**
_eventPublisher.Publish(new MyEvent { Message = "Something is done" });
article.Created = DateTime.Now;
_articleRpRepository.Add(article);
SaveChanges();
return article;
}
}
EventPublisher.cs
public class EventPublisher : IEventPublisher
{
private readonly IEnumerable<IEventListener> _listeners;
public EventPublisher(IEnumerable<IEventListener> listeners)
{
_listeners = listeners;
}
public void Publish<TPayload>(TPayload payload) where TPayload : class
{
var handlersForPayload = _listeners.OfType<IEventListener<TPayload();
foreach (var handler in handlersForPayload)
{
handler.Handle(payload);
}
}
}
あなたはコンテナにし、あなたのリスナーを登録よりCollectionResolverを追加する必要がIEventListener.cs
public interface IEventListener
{}
public interface IEventListener<in TPayload> : IEventListener where TPayload : class
{
void Handle(TPayload payload);
}
ウィンザー、それは '解決できないことを言っているIEnumerbable'それはEventPublisher' 'のインスタンスを作成する必要があること –
zaitsman