标签: ninject-2

Ninject Intercept

从什么dll我可以获得拦截的扩展?我从http://github.com/danielmarbach/ninject.extensions.interception添加了Ninject.Extensions.Interception .那里没有运气.有一些样品有效吗?

我需要的是制作一个拦截器,它将从WcfClient传递到WcfServer一个具有不同参数的不同函数,这样我就不必在WcfServer代码后面实现已经实现的函数了.所以我已经实现的功能的签名是 -

public static T InvokeService<T>(MethodInfo MethodName, Type genericType, Type BlClass, params object[] ParamList)
Run Code Online (Sandbox Code Playgroud)

它的作用是通过BlClass激活Method并向其发送ParamList.我想制作一个拦截器,它将动态填充参数,同时解决WcfServer方面的问题.但首先我如何才能访问我的ninjectModule中的Intercept扩展?
在此先感谢您提供的任何帮助:)

ps试过:

using Ninject.Extensions.Interception;
Run Code Online (Sandbox Code Playgroud)

和:

using Ninject.Core;
using Ninject.Core.Interception;
Run Code Online (Sandbox Code Playgroud)

ninject interceptor ninject-2 ninject-extensions

2
推荐指数
1
解决办法
1403
查看次数

使用Ninject注入一个整数

我有下课

public class Foo
{
  public Foo(int max=2000){...}
}
Run Code Online (Sandbox Code Playgroud)

我想使用Ninject为Foo注入一个常量值.我试过这个

Bind<Foo>().ToSelft().WithConstructorArgument("max", 1000);
Run Code Online (Sandbox Code Playgroud)

但是当我尝试使用时出现以下错误_ninject.Get<Foo>:

Error activating int
No matching bindings are available, and the type is not self-bindable.
Activation path:
  3) Injection of dependency int into parameter max of constructor of type Foo
Run Code Online (Sandbox Code Playgroud)

c# ninject ninject-2

2
推荐指数
1
解决办法
1020
查看次数

模拟对象无法返回所需的对象

肯定会有一些我忽视的东西 - 通常是我遇到这样的问题.

我有一个控制器只是根据提供的ID返回一篇新闻文章:

[HandleError]
public class HomeController : Controller
{
    private readonly IArticleRepository articleRepository;

    public HomeController(IArticleRepository Repository)
    {
        articleRepository = Repository;
    }

    public ActionResult Index()
    {
        return View("Index");
    }

    // Here's the bit we're interested in
    public ActionResult Article(int id)
    {
        var article = articleRepository.GetById(id);

        return View("Article", article);
    }

}
Run Code Online (Sandbox Code Playgroud)

我正在使用Moq嘲笑这个:

[TestFixture]
public class HomeControllerTests
{
    HomeController controller;
    int articleId;
    Article model;

    [TestFixtureSetUp]
    public void SetupMethods()
    {
        Mock<IArticleRepository> repositoryMock = new Mock<IArticleRepository>();
        repositoryMock.Setup(x => x.GetById(articleId)).Returns(GetSampleArticle());

        controller = new HomeController(repositoryMock.Object); …
Run Code Online (Sandbox Code Playgroud)

c# nunit moq ninject-2 asp.net-mvc-3

0
推荐指数
1
解决办法
1300
查看次数

使用WithConstructorArgument并创建绑定类型

我有一个看起来像这样的绑定:

kernel.Bind<IRepository<Holiday>>().To<RepositoryBase<Holiday>>();
Run Code Online (Sandbox Code Playgroud)

问题是RepositoryBase采用了一个名为context的UnitOfWork的构造函数参数.这不是,本身就是一个问题.Ninject应该解决它.除了我有两个UnitOfWork实现的事实,两个都使用属性鉴别器绑定.

kernel.Bind<IUnitOfWork>().To<MS_DevEntities>().WhenTargetHas<MsDataAttribute>()
    .InRequestScope();
Run Code Online (Sandbox Code Playgroud)

如何指定在创建IRepository时,应该使用MS_DevEntities创建?

当然,我可以这样做:

kernel.Bind<IRepository<Holiday>>().To<RepositoryBase<Holiday>>()
    .WithConstructorArgument("context", new MS_DevEntities());
Run Code Online (Sandbox Code Playgroud)

但是,我宁愿让Ninject创建实例,特别是因为我正在使用.InRequestScope()生命周期.

有什么建议?

编辑:

以前,我使用的是如下所示的类:

public class HolidayRepository : RepositoryBase<Holiday>, IHolidayRepository
{
    public HolidayRepository([MsData]IUnitOfWork context) : base(context){}
}
Run Code Online (Sandbox Code Playgroud)

但是,我现在发现自己有几十个,但是当我需要创建一个新的存储库时,它们并没有做太多工作,而是增加了额外的工作.我想直接在绑定中映射这些.

EDIT2:

我想我可以做这样的事情,但看起来有点像黑客.有没有更好的办法?

kernel.Bind<MS_DevEntities>().ToSelf().InRequestScope();
kernel.Bind<IRepository<Holiday>>().To<RepositoryBase<Holiday>>()
    .WithConstructorArgument("context", 
        (context) => context.Kernel.Get<MS_DevEntities>());
Run Code Online (Sandbox Code Playgroud)

ninject ninject-2

0
推荐指数
1
解决办法
2252
查看次数