标签: ninject-2

ASP.Net MVC 3,Ninject和Quartz.Net - 如何?

我现在正在使用Ninject 2.2.1.4,使用我的MVC3,我成功配置Ninject运行它,但我不知道如何在我的MVC3中使用Quartz.Net运行Ninject任何人都可以帮忙吗?

quartz.net ninject-2 asp.net-mvc-3

13
推荐指数
1
解决办法
4225
查看次数

自定义成员资格提供程序的依赖注入

我有一个ASP.NET MVC Web应用程序,它实现了自定义成员资格提供程序.自定义成员资格提供程序使用UserRepository其构造函数,该构造函数提供成员资格提供程序和NHibernate之间的接口.它UserRepository由Ninject IoC容器提供.

但是,显然,当.NET实例化提供程序时,这不起作用:无参数构造函数没有UserRepository而无法创建一个(UserRepository需要将NHibernate会话传递给它的构造函数),这意味着提供者无法访问其数据存储.如何解决对象依赖?

值得注意的是,这是一个已经使用Ninject进行改造的现有应用程序.以前我使用无参数构造函数,它们能够与参数化构造函数一起创建所需的依赖项,以帮助进行单元测试.

有什么想法,还是我把自己建在一个角落里?

asp.net asp.net-mvc dependency-injection ninject ninject-2

11
推荐指数
2
解决办法
4418
查看次数

Ninject如何在ASP.NET MVC中创建控制器?

这可能是一个愚蠢的问题,但我正在寻找Ninject来源,并没有看到NInject注册自己的控制器工厂.我也没有IControllerFactoryNinject.Web.Mvc集会中看到任何课程.我错过了什么吗?Ninject如何创建控制器并将参数注入构造函数?

asp.net-mvc ninject ninject-2 ninject.web.mvc asp.net-mvc-3

11
推荐指数
1
解决办法
2025
查看次数

使用Ninject 2.0注入相同类型的多个构造函数参数

我正在使用Ninject 2.0在我的一个应用程序中处理DI,而且我遇到了令我困惑的事情.说实话,零文档并没有太大帮助.

假设我有一个带签名的构造函数 -

ctor(IServiceFactory factory1, IServiceFactory factory2)
{
    this.factory1 = factory1;
    this.factory2 = factory2;
}
Run Code Online (Sandbox Code Playgroud)

虽然这两个服务实现了相同的接口,但它们是完全不同的实现,并且在不同的时间使用,因此我不想注入IEnumerable<IServiceFactory>.

我的问题是,当我绑定实例时,如何告诉Ninject每个注入的内容?

提前致谢.

更新

为了让任何想要看到代码的人在阅读雷莫的链接后结束,...这里简单介绍一下.(我从未意识到C#有参数属性!)

//abstract factory
public interface IServiceFactory
{
    Service Create();
}

//concrete factories
public class Service1Factory : IServiceFactory
{
    public IService Create()
    {
        return new Service1();
    }
}

public class Service2Factory : IServiceFactory
{
    public IService Create()
    {
        return new Service2();
    }
}

//Binding Module (in composition root)
public class ServiceFactoryModule : NinjectModule
{
    public override void Load()
    { …
Run Code Online (Sandbox Code Playgroud)

dependency-injection inversion-of-control ninject-2

11
推荐指数
1
解决办法
4042
查看次数

Ninject,Bind应该是.InRequestScope()OR .InSingletonScope()

我有下面的代码一个可以绑定到我的用户存储库,另一个可以绑定到缓存.我应该为UserRepository和Cache使用什么范围.UserRepository上的Scope应该是Singleton吗?

    this.Bind<IUserRepository>().To<UserRepositary>().InRequestScope();

    this.Bind<IDistributedCacheService>().To<DistributedCacheService>().InSingletonScope();
Run Code Online (Sandbox Code Playgroud)

ninject-2 asp.net-mvc-3

10
推荐指数
1
解决办法
5812
查看次数

Ninject.MVC3,将DependencyResolver传递给服务层?

在使用Ninject.MVC 2.2.0.3(合并之后)的MVC3应用程序中,而不是将repostories直接注入控制器,我试图创建一个包含businesslogic的服务层并在那里注入repostories.我将ninject-DependencyResolver作为动态对象传递给服务层(因为我不想在那里引用mvc或ninject).然后我在其上调用GetService来获取我在NinjectHttpApplicationModule中指定的绑定和生命周期的存储库.编辑:简而言之,它失败了.

在这种情况下,如何将IoC容器传递给服务层?(不同的方法也非常受欢迎.)

编辑:这是一个例子来说明我如何理解答案和评论.

我应该避免服务定位器(反)模式,而是使用依赖注入.所以我想说我想在Northwind中为产品和类别创建一个管理站点.我根据表定义创建模型,存储库,服务,控制器和视图.此时服务直接调用存储库,没有逻辑.我有功能支柱,视图显示原始数据.这些绑定是为NinjectMVC3配置的:

    private static void RegisterServices(IKernel kernel)
    {
        kernel.Bind<ICategoryRepository>().To<CategoryRepository>();
        kernel.Bind<IProductRepository>().To<ProductRepository>();
    }       
Run Code Online (Sandbox Code Playgroud)

存储库实例是由ninject通过ProductController中的两层构造函数注入创建的:

private readonly ProductsService _productsService;
public ProductController(ProductsService productsService)
{
    // Trimmed for this post: nullchecks with throw ArgumentNullException 
    _productsService = productsService;
}
Run Code Online (Sandbox Code Playgroud)

和产品服务:

protected readonly IProductRepository _productRepository;
public ProductsService(IProductRepository productRepository)
{
    _productRepository = productRepository;
}
Run Code Online (Sandbox Code Playgroud)

我现在没有必要解耦服务,但已准备好模拟数据库.
要在Product/Edit中显示类别下拉列表,我创建一个ViewModel,除了Product之外还包含类别:

public class ProductViewModel
{
    public Product Product { get; set; }
    public IEnumerable<Category> Categories { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

ProductsService现在需要CategoriesRepository来创建它.

    private readonly ICategoryRepository _categoryRepository; …
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc ninject inversion-of-control ninject-2 asp.net-mvc-3

10
推荐指数
1
解决办法
5886
查看次数

从头开始使用ASP.NET MVC 2和Ninject 2

我刚刚在一个新项目上做了File - > New Project.啊,绿色田野的气味.

我正在使用刚刚发布的ASP.NET MVC 2(即没有预览或发布候选版本,真实的东西),并且认为我使用Ninject 2(也是已发布的版本)与MVC扩展开始了一个良好的开端.我下载了MVC扩展项目,在VS2008Sp1中打开它,在发布模式下构建它,然后进入mvc2\build\release文件夹并将Ninject.dll和Ninject.Web.Mvc.dll从那里复制到我的Libraries文件夹中项目(这样我就可以在源代码管理中把它们拉到一边,并且每个地方都有正确的版本).我没有包含相应的.xml文件 - 我应该吗?他们只提供智能感知或其他功能吗?我相信没什么大不了的.

Anyhoo,我遵循了我能找到的最新建议; 我在我的MVC2项目中引用了DLL,然后开始使用Global.asax.cs.首先,我让它继承自NinjectHttpApplication.我删除了Application_Start()方法,并改为使用OnApplicationStarted().这是方法:

protected override void OnApplicationStarted() 
{ 
    base.OnApplicationStarted(); 
    AreaRegistration.RegisterAllAreas(); 
    RegisterRoutes(RouteTable.Routes); 
    // RegisterAllControllersIn(Assembly.GetExecutingAssembly()); 
} 
Run Code Online (Sandbox Code Playgroud)

我也遵循VS的建议并实现了CreateKernel方法:

protected override Ninject.IKernel CreateKernel() 
{ 
    // RegisterAllControllersIn(Assembly.GetExecutingAssembly()); 
    return new StandardKernel(); 
} 
Run Code Online (Sandbox Code Playgroud)

就这些.没有其他修改项目.

您会注意到RegisterAllControllersIn()方法在上面的两个地方被注释掉了.我想我可以用三种不同的组合来运行它,所有这些都带有时髦的副作用;

  • 像上面那样运行它.

然后,我将获得标准的"欢迎使用ASP.NET MVC"页面的所有荣耀.但是,在浏览器中正确显示此页面后,VS会向我显示抛出的异常.它抛出NinjectControllerFactory.GetControllerInstance(),它在controllerType参数中使用NULL值调用.请注意,这是在/ Home页面呈现后发生的 - 我不知道为什么再次调用它,并且通过使用断点我已经确定已成功调用了HomeController的GetControllerInstance().为什么这个带有controllerType的新调用为null?我真的不知道.此时按F5将我带回浏览器,没有任何投诉.

  • 取消注释CreateKernel()中的RegisterAllControllersIn()方法

这是东西真正开始变得时髦的地方.现在我收到404错误.有时我在RegisterAllControllersIn()行上也得到了一个ArgumentNullException,但这种情况非常罕见,而且我无法重现它.

  • 取消注释OnApplicationStarted()中的RegisterAllControllers()方法

(并将注释放回CreateKernel()中的注释)

结果似乎与第1点中的行为完全相同.

因此,为了永远不进行 - 是否有关于如何使用Ninject 2(两个非beta版本)设置MVC 2项目以获取Ninject提供的控制器的确切分步指南?当然,我将开始提供一些实际的注入东西(如ISession对象和存储库,记录器等),但我想我会先让它工作.

任何帮助将非常感谢!

(也发布到Ninject Google Group)

ninject-2 asp.net-mvc-2

9
推荐指数
1
解决办法
2618
查看次数

在Ninject中将单例绑定到多个服务

我有一个问题,似乎与http://markmail.org/message/6rlrzkgyx3pspmnf中描述的问题非常相似,如果您使用不同的服务类型访问它,实际上创建的单个实例不仅仅是单个实例.

我正在使用最新版本的Ninject 2 for Compact Framework,我遇到的确切问题是,如果我将相同的提供程序方法绑定到:

Func<Service> serviceCreator = () => new Service(false);
kernel.Bind<IService>().ToMethod(serviceCreator).InSingletonScope();
kernel.Bind<Service>().ToMethod(serviceCreator).InSingletonScope();
Run Code Online (Sandbox Code Playgroud)

如果我将它们解析为IService和Service,它似乎创建了2个Service实例.

这在解析Service时会导致循环依赖性异常.

这是设计,还是一个bug?

.net ninject inversion-of-control ninject-2

9
推荐指数
2
解决办法
3018
查看次数

Ninject 2.0:没有属性的属性注入

有没有办法在不使用[Inject]属性的情况下在Ninject 2中使用Property Injection ?这会在类中使用Ninject创建一个依赖项,我宁愿避免对IoC容器有不必要的依赖,这就是我最常使用Constructor Injection的原因.

我想这同样适用于方法注入

dependency-injection ninject ioc-container ninject-2

9
推荐指数
1
解决办法
2575
查看次数

是Kernel.Get <T>()线程安全+良好模式在组件之间共享内核

Kernel.Get()线程安全吗?我的目标是在我的所有组件中共享我的内核实例,他们可能会在不同的线程上同时调用Kernel.Get().

Kernel.Get()线程安全吗?

在所有位于不同dll中的应用程序组件之间共享应用程序内核的最佳模式是什么?如果这是有意义的,我不希望将工厂的实例传递给我的应用程序的每个组件.

ninject ninject-2

9
推荐指数
1
解决办法
1964
查看次数