Tag: ninject

使用dependency injection注入dependency injection器

对dependency injection很新,我试图弄清楚这是否是反模式。 假设我有3个组件: Foo.Shared – this has all the interfaces Foo.Users – references Foo.Shared Foo.Payment – references Foo.Shared Foo.Users需要一个在Foo.Payment中构建的对象,而Foo.Payment也需要来自Foo.Users的东西。 这会产生某种循环依赖。 我在Foo.Shared中定义了一个接口,它代理我正在使用的dependency injection框架(在本例中为NInject)。 public interface IDependencyResolver { T Get(); } 在容器应用程序中,我有一个这个接口的实现: public class DependencyResolver:IDependencyResolver { private readonly IKernel _kernel; public DependencyResolver(IKernel kernel) { _kernel = kernel; } public T Get() { return _kernel.Get(); } } 配置如下所示: […]

在Ninject中注入接口数组

请考虑以下代码。 public interface IFoo { } public class Bar { public Bar(IFoo[] foos) { } } public class MyModule : NinjectModule { public override void Load() { Bind().ToConstant(new IFoo[0]); // ToConstant() is just an example } } public class Program { private static void Main(string[] args) { var kernel = new StandardKernel(new MyModule()); var bar […]

Ninject绑定

如何将我的界面绑定到不同程序集中的具体类? 我的解决方案中有以下项目: Foo.Data Foo.Domain 在Structure Map中,我将两个程序集名称添加到StructureMap.config文件中,然后使用PluginFamily和Pluggable属性将我的接口映射到我的具体类’。 如何用Ninject完成同样的事情?

何时使用Ninject和MongoDB使用Singleton vs Transient vs Request

当我在global.cs文件中进行绑定时,我不太确定何时应该使用SingletonScope()vs TransientScope()vs RequestScope()。 我有一个例如我对MongoSession的调用(使用NoRM和mvcStarter项目http://mvcstarter.codeplex.com/ ),它设置为SingletonScope但是我创建了一个使用这个MongoSession对象的存储库来简化对Mongo的调用,例如,我有一个NewsRepository,它使用MongoSession从数据中获取我的新闻项。 作为一个例子,我有一个调用,它获取DisplayOnHome设置为true的新闻项目,并通过CreationDate获取最新项目。 这样的存储库应该是SingletonScope还是RequestScope会更合适? 我什么时候应该使用它们?为什么?

惰性dependency injection

我有一个项目,其中Ninject用作IoC容器。 我担心的是很多类都有这样的构造函数: [Inject] public HomeController( UserManager userManager, RoleManager roleManager, BlahblahManager blahblahManager) { _userManager = userManager; _roleManager = roleManager; _blahblahManager = blahblahManager; } 如果我不想同时拥有这些类的所有实例怎么办? 当所有这些类被Lazy包装并传递给构造函数的方式并不是我所需要的。 尚未创建T实例,但Lazy实例已存储在内存中。 我的同事建议我使用Factory模式控制所有实例,但我不确定IoC是否有这么好的设计错误。 有没有针对这种情况的解决方法,或者IoC在其设计中确实存在如此大的缺陷? 也许我应该使用另一个IoC容器? 有什么建议?

使用ASP.Net MVC 4 Web API和Ninject.Web.WebApi发布问题

我正在尝试将新的ASP.Net MVC 4 Web API项目模板与Ninject一起使用,但是在以下错误中遇到了障碍: 程序集’Ninject.Web.WebApi.Filter.DefaultFilterProvider’中的方法’GetFilters’来自程序集’Ninject.Web.WebApi,Version = 3.0.0.0,Culture = neutral,PublicKeyToken = c7192dc5380945e7’没有实现。 我正在使用ASP.Net MVC 4 – > Web API模板在Visual Studio 2010中创建一个全新的项目,我正在使用最新的Ninject NuGet包: Ninject 3.0.1.10 Ninject.Web.Common 3.0.0.7 Ninject.Web.WebApi 3.0.0.2 我尝试过在这个问题中提出的解决方案,但是我没有运气 – 如果我删除对Ninject.Web.WebApi的引用,那么MVC永远不会使用Ninject。 我也注意到他们提到了Ninject.MVC3但是我使用的是新的Ninject.WebApi插件。 我正在使用NinjectWebCommon.cs中的默认绑定代码,该代码是在NuGet安装期间创建的,并尝试在RegisterServices()中注册一个简单服务 [assembly: WebActivator.PreApplicationStartMethod(typeof(mkts.web.App_Start.NinjectWebCommon), “Start”)] [assembly: WebActivator.ApplicationShutdownMethodAttribute(typeof(mkts.web.App_Start.NinjectWebCommon), “Stop”)] namespace mkts.web.App_Start { using System; using System.Web; using Microsoft.Web.Infrastructure.DynamicModuleHelper; using Ninject; using Ninject.Web.Common; using mkts.service; public […]

MVC 3 – 如何实现服务层,我需要存储库吗?

我目前正在使用EF Code First,SQL CE和Ninject构建我的第一个MVC 3应用程序。 我已经阅读了很多关于使用存储库,工作单元和服务层的信息。 我想我已经完成了基础知识,并且我已经完成了自己的实现。 这是我目前的设置: 实体 public class Entity { public DateTime CreatedDate { get; set; } public Entity() { CreatedDate = DateTime.Now; } } public class Profile : Entity { [Key] public Guid UserId { get; set; } public string ProfileName { get; set; } public virtual ICollection Photos { get; […]

使用Ninject填充Log4Net依赖关系

我在我的应用程序中使用Ninject作为DI容器。 为了松散地耦合到我的日志库,我使用这样的接口: public interface ILogger { void Debug(string message); void Debug(string message, Exception exception); void Debug(Exception exception); void Info(string message); …you get the idea 我的实现看起来像这样 public class Log4NetLogger : ILogger { private ILog _log; public Log4NetLogger(ILog log) { _log = log; } public void Debug(string message) { _log.Debug(message); } … etc etc 具有日志记录依赖性的示例类 public partial […]

Ninject工厂根据枚举创建T

我想让Ninject根据特定的枚举输入值解析T的实例。 我已经阅读了有关Ninject工厂扩展的内容,但是我找不到工厂根据枚举解析特定类的任何示例。 每个类派生自一个基类,派生类有几个不同的接口,Ninject也必须解决这些接口。 例如,界面应如下所示: public interface IProcessFactory { T Create(ProcessIndex processIndex) where T : BaseProcess; } 怎么能实现这一目标?

绑定ToConstant并调用InSingletonScope是多余的?

好吧,这个问题很简单地用标题来说明。 对于本地变量factory : var factory = Fluently.Configure() … 这两行是否相同: Bind().ToConstant(factory).InSingletonScope(); 和: Bind().ToConstant(factory);