繁体   English   中英

绑定介体(shortbus)与/要注入

[英]Binding mediator (shortbus) with/to ninject

我试图将调解器模式用于shortbus( https://github.com/mhinze/ShortBus )。 除了将其绑定到ninject之外,一切都进行得很好。 有一个这样的structuremap示例

    public BasicExample()
    {
        ObjectFactory.Initialize(i =>
        {
            i.Scan(s =>
            {
                s.AssemblyContainingType<IMediator>();
                s.TheCallingAssembly();
                s.WithDefaultConventions();
                s.AddAllTypesOf((typeof(IRequestHandler<,>)));
                s.AddAllTypesOf(typeof(INotificationHandler<>));
            });

            i.For<IDependencyResolver>().Use(() => DependencyResolver.Current);
        });

        ShortBus.DependencyResolver.SetResolver(new StructureMapDependencyResolver(ObjectFactory.Container));
    }

以上是单元测试。 我也希望能够进行单元测试,但最重要的是,我只希望它与整个项目一起工作。

有一个NinjectDependencyResolver,它应该与ninject一起工作。 我只是知道ninject很难做到这一点。

我将Ninject MVC与NinjectWebCommon一起使用。 上面的代码应该适用于Structuremap,所以我只需要Ninject的等效代码即可。

Ninject的工作方式略有不同。 对于IRequestHandler<,>INotificationHandler<>类型绑定,应使用ninject.extensions.conventions并执行以下操作:

var kernel = new StandardKernel();

kernel.Bind(x => x.FromThisAssembly()
    .SelectAllClasses()
    .InheritedFromAny(
        new[]
        {
            typeof(ICommandHandler<>), 
            typeof(IQueryHandler<,>)
        })
    .BindDefaultInterfaces());

kernel.Bind<IDependencyResolver>().ToMethod(x => DependencyResolver.Current);


ShortBus.DependencyResolver.SetResolver(new NinjectDependencyResolver(kernel));

您可能需要调整以下内容:

  • FromThisAssembly() ->这意味着仅绑定您编写该行的程序集类型。 您可以使用另一种机制,在其中指定在哪些程序集中查找ICommandHandler<>IQueryHandler<,>类型。
  • BindDefaultInterfaces() :有关说明和替代方法,请参见此处

还要注意,我的示例代码基于ShortBus.Ninject 3.0.48-Beta 最新的ShortBus 稳定版本正在引用StructureMap。

编辑:我看到你标记了问题asp.net 与其使用StructureMap.Ninject及其NinjectDependencyResolver ,不如使用Ninject.Web.Common (确保它是最新版本!)和NinjectDependencyResolverNinjectDependencyResolver更好

为了完整性...别忘了绑定您的IMediator

kernel.Bind<IMediator>().To<Mediator>();

还值得注意的是,如果使用BindDefaultInterfaces(),则无法命名处理程序,但是您很喜欢。 请参阅BatteryBackupUnit发布的链接。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM