标签: ninject

什么是Ninject,你什么时候使用它?

我一直在帮助一些项目的朋友,有一个使用Ninject的课程.我是C#的新手,我不知道那个班级在做什么,这就是我需要了解Ninject的原因.任何人都可以解释Ninject是什么以及什么时候使用它(如果可能,请举例说明)?或者,如果你可以指出一些很棒的链接.

我试过这个问题:Ninject教程/文档?但它并没有真正帮助像我这样的初学者.

c# dependency-injection ninject

57
推荐指数
3
解决办法
4万
查看次数

asp.net mvc的Ninject和Filter属性的依赖注入

我正在为asp.net mvc 3编写自定义授权过滤器.我需要向用户服务注入类,但我不知道如何做到这一点.

public class AuthorizeAttribute : FilterAttribute, IAuthorizationFilter
{
    private IUserService userService;
    private string[] roles;

    public AuthorizeAttribute(params string[] roles)
    {
        this.roles = roles;
    }

    public void OnAuthorization(AuthorizationContext filterContext)
    {
        throw new NotImplementedException();
    }
}
Run Code Online (Sandbox Code Playgroud)

我正在使用ninject进行依赖注入.我不想使用Factory或服务定位器模式.

我的绑定在global.acsx中看起来像这样:

    internal class SiteModule : NinjectModule
    {
        public override void Load()
        {
            Bind<IUserService>().To<UserService>();
        }
    }
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc ninject asp.net-mvc-3

56
推荐指数
4
解决办法
2万
查看次数

Ninject样本申请?

我想开始使用Dependency Injection和IOC,我想更多地使用Ninject.

有没有使用Ninject编写的源代码可用的好应用程序,我可以将其视为参考?

ninject

52
推荐指数
3
解决办法
2万
查看次数

NInject:你在哪里保留对内核的引用?

我在一个新的Web应用程序上使用NInject,有两件事我不清楚:

  1. 我是否需要保持对内核(Session/App变量)的引用以确保GC不收集我的所有实例?例如,如果我指定.Using()然后收集Kernel对象,那么我的所有"单身人士"都不是被收集的吗?

  2. 如果我确实需要保持对Kernel对象的引用,我如何允许传入WithArguments()的参数改变或者这是不可能的.

c# dependency-injection ninject ioc-container inversion-of-control

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

Ninject + Bind通用存储库

我正在尝试将一个通用的IRepository <>接口绑定到我的通用存储库<> - 但它总是返回null?

我尝试过各种各样的事情:

Bind(typeof(IRepository<CustomerModel>)).To(typeof(Repository<CustomerModel>)); 
Bind(typeof(IRepository<>)).To(typeof(Repository<>)); 
Run Code Online (Sandbox Code Playgroud)

但是,如果我传入非通用接口和类,那么它就像梦一样?

c# ninject ioc-container

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

WebActivator做什么?

在使用NuGet为SQL Server CE添加实体框架代码之后,为我生成了此代码.他们没有对任何其他文件进行任何更改.该文件SQLCEEntityFramework.cs已创建并放在App_Start文件夹中.

这是否意味着它会自动执行或者其他什么?当我为MVC 3添加Ninject时也发生了同样的事情.没有代码被添加到global.ascx文件中所以我不知道它的即插即用或者我必须配置一些东西.

[assembly: WebActivator.PreApplicationStartMethod(typeof(StackTorrents.WebUI.App_Start.SQLCEEntityFramework), "Start")]
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc ninject ef-code-first asp.net-mvc-3

48
推荐指数
2
解决办法
3万
查看次数

Ninject:使用Ninject注册已创建的实例?

任何人都可以告诉我是否可以使用Ninject注册已经创建的类实例,以便每次需要注入时它都会使用此实例?

我想你可以称之为单身,但我已经创建了实例.所有文档都指向创建类的新实例.

dependency-injection ninject ninject-2

48
推荐指数
1
解决办法
1万
查看次数

带有通用接口的NInject

我已经定义了一个接口和一个类:

public interface IRepository<T>
{
}

public class RoleRepository:IRepository<Domain_RoleInfo>
{
}
Run Code Online (Sandbox Code Playgroud)

在这里注入:

public RoleService
{
    [Inject]
    public RoleService(IRepository<Domain_RoleInfo> rep)
    {
        _roleRep=rep;
    }
}
Run Code Online (Sandbox Code Playgroud)

如何使用Ninject执行依赖注入,说明如何绑定?

我已经编写了一个如下所示的辅助类,它可以与非泛型接口一起工作.但是如何重构它支持如上所述的通用接口?

public class RegisterNinjectModule : NinjectModule
{
    public override void Load()
    {
        BindServices();
        BindRepositories();
    }

    private void BindServices()
    {

        FindAndBindInterfaces("RealMVC.Service.Interfaces", "RealMVC.Services");            
    }

    private void BindRepositories()
    {
        FindAndBindInterfaces("RealMVC.Repository.Interfaces", "RealMVC.Repositories");   
    }

    private void FindAndBindInterfaces(string interfaceAssemblyName, string implAssemblyName)
    {
        //Get all interfaces
        List<Type> interfaces = Assembly.Load(interfaceAssemblyName).GetTypes().AsQueryable().Where(x => x.IsInterface).ToList();
        IQueryable<Type> ts = Assembly.Load(implAssemblyName).GetTypes().AsQueryable().Where(x => x.IsClass);

        foreach (Type intf in interfaces) …
Run Code Online (Sandbox Code Playgroud)

c# generics ninject

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

ASP.NET MVC 4 + Ninject MVC 3 =没有为此对象定义的无参数构造函数

更新 - 请查看我的答案,找到解决此问题的链接和说明

在我们开始之前,我知道这是一个非常常见的问题,我一直在使用Ninject进行许多卫星没有问题,但是现在它出现了,我无法找到解决办法.此外,不,迄今为止谷歌和SO的结果都没有帮助我.

因此,请考虑从Windows Server 2008 R2上的Visual Studio 2012中的非常非常非常简单的原型ASP.NET MVC 4项目上运行的以下代码:

public class DefaultController : Controller {
    private IGroupPrincipalRepository GroupPrincipalRepository { get; set; }

    [Inject]
    public DefaultController(
        IGroupPrincipalRepository groupPrincipalRepository) {
        this.GroupPrincipalRepository = groupPrincipalRepository;
    }
}
Run Code Online (Sandbox Code Playgroud)

这是NinjectWebCommon.cs RegisterServices方法:

kernel.Bind(typeof(IGroupPrincipalRepository)).ToConstructor(
    c =>
        new GroupPrincipalRepository(new PrincipalContext(ContextType.Domain, "?", "?", "?", "?"))).InSingletonScope();
Run Code Online (Sandbox Code Playgroud)

现在,这就是我使用Ninject的其他项目(但是.NET 4上的ASP.NET MVC 3)的工作原理,据我所知,这是使一切正常运行所需要的.那么,为什么我突然得到为此对象定义的无参数构造函数.异常?

UPDATE

这是完整的NinjectWebCommon.cs文件:

[assembly: WebActivator.PreApplicationStartMethod(typeof(App_Start.NinjectWebCommon), "Start")]
[assembly: WebActivator.ApplicationShutdownMethodAttribute(typeof(App_Start.NinjectWebCommon), "Stop")]

namespace App_Start {
    using System;
    using System.DirectoryServices.AccountManagement;
    using System.Repositories.ActiveDirectory;
    using System.Web;
    using Microsoft.Web.Infrastructure.DynamicModuleHelper;
    using …
Run Code Online (Sandbox Code Playgroud)

c# asp.net-mvc ninject asp.net-mvc-4 visual-studio-2012

39
推荐指数
3
解决办法
2万
查看次数

使用Ninject OWIN中间件在OWIN启动中注入UserStore的依赖关系

在使用OWIN请求管道创建ApplicationUserManager时,使用依赖项注入创建自定义UserStore时遇到问题.

背景

我正在尝试将我们的Web应用程序中的用户功能从使用SimpleMembership迁移到新的ASP.NET标识.在启动新的MVC 5项目时,单页面应用程序的默认实现使用ASP.Identity,使用Entity Framework实现UserStore功能.

在我的例子中,我们已经使用NHibernate作为ORM,并使用ninject实现工作单元模式,以便每个请求有一个NHibernate会话,我想让ASP.Identity与我们现有的框架一起工作.

为此,我创建了一个自定义UserStore,可以通过注入相关的存储库/ nhibernate会话等来创建.然后可以使用Ninject将其注入Controller的构造函数,而不是使用默认实现的GetOwinContext功能.

为了做到这一点,我在Startup的ConfigureAuth(IAppBuilder app)方法中注释掉了以下行,默认情况下会创建UserManager类:

// app.CreatePerOwinContext<ApplicationUserManager>(ApplicationUserManager.Create);
Run Code Online (Sandbox Code Playgroud)

相反,我使用了在安装Ninject.Web.Common.Webhost nuget包时创建的NinjectWebCommon来创建相关的绑定.

这个实现在一些UserManager操作中运行良好,但是对于一些操作,例如ResetPasswordAsync,它失败了,因为没有调用默认的ApplicationUserManager实现,因此从未设置UserManager类中的UserTokenProvider:

    public static ApplicationUserManager Create(IdentityFactoryOptions<ApplicationUserManager> options, IOwinContext context) 
    {
        var manager = new ApplicationUserManager(new UserStore<ApplicationUser>(context.Get<ApplicationDbContext>()));
        // Configure validation logic for usernames
        manager.UserValidator = new UserValidator<ApplicationUser>(manager)
        {
            AllowOnlyAlphanumericUserNames = false,
            RequireUniqueEmail = true
        };
        // Configure validation logic for passwords
        manager.PasswordValidator = new PasswordValidator
        {
            RequiredLength = 6,
            RequireNonLetterOrDigit = true,
            RequireDigit = true,
            RequireLowercase = true,
            RequireUppercase = true,
        };
        // Register two factor authentication providers. …
Run Code Online (Sandbox Code Playgroud)

c# asp.net dependency-injection ninject owin

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