私は多層構造のWebアプリケーションと、構造マップ設定とは別の層にあるハンドラとクエリのクラスを持っています。すべてのハンドラとクエリを動的に登録しようとしましたが、実行できませんでした。アプリケーションを実行しようとするとランタイムエラーが発生します。 IRequestHandlerMediatrを自動的に登録することができません構造マップIoC
public DefaultRegistry() {
Scan(
scan => {
scan.TheCallingAssembly();
scan.WithDefaultConventions();
scan.AssemblyContainingType<DefaultRegistry>();
scan.AssemblyContainingType<IMediator>();
scan.ConnectImplementationsToTypesClosing(typeof(IRequestHandler<,>));
scan.ConnectImplementationsToTypesClosing(typeof(IAsyncRequestHandler<,>));
scan.ConnectImplementationsToTypesClosing(typeof(IRequestHandler<>));
scan.ConnectImplementationsToTypesClosing(typeof(IAsyncRequestHandler<>));
scan.ConnectImplementationsToTypesClosing(typeof(INotificationHandler<>));
scan.ConnectImplementationsToTypesClosing(typeof(IAsyncNotificationHandler<>));
scan.ConnectImplementationsToTypesClosing(typeof(IRepository<>));
scan.With(new ControllerConvention());
});
//For<IExample>().Use<Example
For<SingleInstanceFactory>().Use<SingleInstanceFactory>(ctx => t => ctx.GetInstance(t));
For<MultiInstanceFactory>().Use<MultiInstanceFactory>(ctx => t => ctx.GetAllInstances(t));
For<IMediator>().Use<Mediator>();
For<IUnitOfWork>().Use<UnitOfWork>().LifecycleIs<TransientLifecycle>();
For(typeof(IRequestHandler<,>)).DecorateAllWith(typeof(Business.Pipeline.MediatorPipeline<,>));
}
コントローラ var query = new GetUserQuery(id);var user = _mediator.Send(query);
クエリ
public class GetUserQuery : IRequest<User>
{
public GetUserQuery() { }
public GetUserQuery(int id)
{
Id = id;
}
public int Id { get; set; }
}
に指定されない構成しません
あなたは私から他のプロジェクトをスキャンする方法いくつかのコマンドをスキャンするために追加したレジストリ
すべて1のアセンブリ(プロジェクト?) – Alex
@Alexいいえ、あなたは私の答えに従って、AssemblyContainingTypeを使用することができます異なる –