我的问题的简短版本:
我的问题的更长版本:
我想做什么......
我目前正在开始创建一个MVC 3应用程序,它将使用Entity Framework 4,使用数据库第一种方法.我想这样做,所以我试图设计类,层等,以便高度可测试.但是,除了对它们的学术理解之外,我对单元测试或集成测试几乎没有经验.
经过大量的研究,我决定使用
我知道哪个框架最好的主题,等等,可以进入这个,但在这一点上,我真的不知道任何一个形成一个坚实的意见.所以,我决定采用这些免费的解决方案,这些解决方案似乎很受欢迎并且维护得很好.
到目前为止我学到了什么......
我花了一些时间研究这些东西,阅读资源,如:
从这些资源中,我已经设法满足了对存储库模式的需求,以及存储库接口,以便分离我的控制器和数据访问逻辑.我已经在我的应用程序中写了一些内容,但我承认我不清楚整个事情的机制,以及我是否正在进行这种解耦以支持模拟或依赖注入,或两者兼而有之.因此,我当然不介意听到你这些人的意见.在这一点上我可以获得的任何清晰度都会对我有所帮助.
对我来说事情变得浑浊......
在我开始尝试绕过Ninject之前,我认为我已经很好地掌握了这些东西,如上面引用的构建可测试的ASP.NET MVC应用程序中所述.具体来说,我完全迷失了作者开始描述服务层实现的程度,大约是文档的一半.
无论如何,我现在正在寻找更多的资源来学习,以便尝试围绕这些东西获得各种观点,直到它开始对我有意义.
总结所有这些,将其归结为具体问题,我想知道以下内容:
编辑:
我刚刚在Github上发现了Ninject官方维基,所以我将开始研究它是否开始为我澄清事情.但是,我仍然对SO社区对所有这些的想法非常感兴趣:)
任何人都可以告诉我是否可以使用Ninject注册已经创建的类实例,以便每次需要注入时它都会使用此实例?
我想你可以称之为单身,但我已经创建了实例.所有文档都指向创建类的新实例.
关于ninject的最新版本(2.2.1.4)有几个问题.
试图将Linq2sql绑定DataContext
到具体实现InRequestScope
(在类库项目中)
Bind<DataContext>().To<MoneywatchDataContext>()
Run Code Online (Sandbox Code Playgroud)
但找不到InRequestScope
方法
最后这样做,
Bind<DataContext>().To<MoneywatchDataContext>().InScope(ctx => HttpContext.Current)
Run Code Online (Sandbox Code Playgroud)
只是想知道是否:
InRequestScope
Method 完全相同.HTTContext.Current
的GC被用时,底层DataCotext
也将被处理掉.我正在使用Ninject 2.2,我正在尝试为一个带有两个类型参数的开放泛型设置绑定.根据此答案由QES,结合正确的语法IRepository<T>
来Repository<T>
是这样的:
Bind(typeof(IRepository<>)).To(typeof(Repository<>));
Run Code Online (Sandbox Code Playgroud)
如果IRepository
仅使用一个类型参数,则上述语法可以正常工作,但如果需要更多,则会中断(给出Using the generic type 'Repository<T,U>' requires 2 type arguments
编译时错误.)
我怎样才能结合IRepository<T,U>
到Repository<T,U>
?
谢谢.
我对WithConstructorArgument的理解可能是错误的,因为以下内容不起作用:
我有一个服务,让我们称之为MyService,其构造函数采用多个对象,以及一个名为testEmail的字符串参数.对于此字符串参数,我添加了以下Ninject绑定:
string testEmail = "test@example.com";
kernel.Bind<IMyService>().To<MyService>().WithConstructorArgument("testEmail", testEmail);
Run Code Online (Sandbox Code Playgroud)
但是,在执行以下代码行时,我得到一个异常:
var myService = kernel.Get<MyService>();
Run Code Online (Sandbox Code Playgroud)
这是我得到的例外:
激活字符串时出错没有匹配的绑定可用,并且该类型不可自我绑定.激活路径:
2)将依赖字符串注入到MyService类型的构造函数的参数testEmail中
1)请求MyService建议:
1)确保已为字符串定义了绑定.
2)如果在模块中定义了绑定,请确保已将模块加载到内核中.
3)确保您没有意外创建多个内核.
4)如果使用构造函数参数,请确保参数名称与构造函数参数名称匹配.
5)如果使用自动模块加载,请确保搜索路径和过滤器正确无误.
我在这做错了什么?
更新:
这是MyService构造函数:
[Ninject.Inject]
public MyService(IMyRepository myRepository, IMyEventService myEventService,
IUnitOfWork unitOfWork, ILoggingService log,
IEmailService emailService, IConfigurationManager config,
HttpContextBase httpContext, string testEmail)
{
this.myRepository = myRepository;
this.myEventService = myEventService;
this.unitOfWork = unitOfWork;
this.log = log;
this.emailService = emailService;
this.config = config;
this.httpContext = httpContext;
this.testEmail = testEmail;
}
Run Code Online (Sandbox Code Playgroud)
我有所有构造函数参数类型的标准绑定.只有'string'没有绑定,而HttpContextBase的绑定有点不同:
kernel.Bind<HttpContextBase>().ToMethod(context => new HttpContextWrapper(new HttpContext(new MyHttpRequest("", "", "", …
Run Code Online (Sandbox Code Playgroud) c# dependency-injection exception-handling ninject ninject-2
我正在尝试使用MVC 3中的ninject将存储库注入自定义成员资格提供程序.
在MembershipProvider中,我尝试了以下内容:
[Inject]
public ICustomerRepository _customerRepository{ get; set; }
Run Code Online (Sandbox Code Playgroud)
和
[Inject]
public TUMembershipProvider(ICustomerRepository customerRepository)
{
_customerRepository = customerRepository;
}
Run Code Online (Sandbox Code Playgroud)
在我的ninject模块中,我尝试了以下方法:
Bind<MembershipProvider>().ToConstant(Membership.Provider);
Run Code Online (Sandbox Code Playgroud)
以上都不是.
当我使用(在global.asa)
kernel.Inject(Membership.Provider);
Run Code Online (Sandbox Code Playgroud)
和...一起
[Inject]
public ICustomerRepository _customerRepository{ get; set; }
Run Code Online (Sandbox Code Playgroud)
它有效,但我没有生命周期管理,这将导致NHibernate的"ISession is open"错误,因为ISession是InRequestScope而存储库不是.
首先,对于大帖子(我先尝试做一些研究)和同一问题的混合技术(ASP.NET MVC 3,Ninject和MvcContrib),我感到很遗憾.
我正在使用ASP.NET MVC 3开发一个项目来处理一些客户端订单.
简而言之:我有一些继承自和抽象类的对象,Order
当我向控制器发出POST请求时,我需要解析它们.我该如何解决正确的类型?我是否需要覆盖DefaultModelBinder
该类,或者还有其他方法可以执行此操作?有人可以提供一些代码或其他链接,如何做到这一点?任何帮助都会很棒!如果帖子令人困惑,我可以做任何改变以表明清楚!
所以,对于我需要处理的订单,我有以下继承树:
public abstract partial class Order {
public Int32 OrderTypeId {get; set; }
/* rest of the implementation ommited */
}
public class OrderBottling : Order { /* implementation ommited */ }
public class OrderFinishing : Order { /* implementation ommited */ }
Run Code Online (Sandbox Code Playgroud)
这些类都是由Entity Framework生成的,所以我不会修改它们,因为我需要更新模型(我知道我可以扩展它们).此外,会有更多的订单,但都来自Order
.
我有一个通用的view(Create.aspx
)来创建一个订单,这个视图为每个继承的订单调用一个强类型的局部视图(在这种情况下OrderBottling
和OrderFinishing
).我Create()
为OrderController
类上的POST请求定义了一个GET请求的方法和其他方法.第二个是如下:
public class OrderController : Controller
{
/* rest of the …
Run Code Online (Sandbox Code Playgroud) 我在用
目前我正在使用nhibernate,ninject与存储库模式和服务层.
所以我有这个
public class NhibernateSessionFactory
{
public ISessionFactory GetSessionFactory()
{
ISessionFactory fluentConfiguration = Fluently.Configure()
.Database(MsSqlConfiguration.MsSql2008.ConnectionString(c => c.FromConnectionStringWithKey("ConnectionString")))
.Mappings(m => m.FluentMappings.AddFromAssemblyOf<Framework.Data.Mapping.TableAMap>().Conventions.Add(ForeignKey.EndsWith("Id")))
.ExposeConfiguration(cfg => cfg.SetProperty("adonet.batch_size", "20"))
.ExposeConfiguration(c => c.SetProperty("generate_statistics", "true"))
//.ExposeConfiguration(BuidSchema)
.BuildSessionFactory();
return fluentConfiguration;
}
private static void BuidSchema(NHibernate.Cfg.Configuration config)
{
new NHibernate.Tool.hbm2ddl.SchemaExport(config).Create(false, true);
}
public class NhibernateSessionFactoryProvider : Provider<ISessionFactory>
{
protected override ISessionFactory CreateInstance(IContext context)
{
var sessionFactory = new NhibernateSessionFactory();
return sessionFactory.GetSessionFactory();
}
}
public class NhibernateModule : NinjectModule
{
public override …
Run Code Online (Sandbox Code Playgroud) Ninject 2的变化说Ninject支持Common Service Locator,但我该如何使用它?我找不到任何手册或样本.
dependency-injection ninject inversion-of-control common-service-locator ninject-2
在MVC 3中,他们添加了一个依赖解析器,我一直在使用它.在回答某人的问题时,有人评论过你应该使用Ninject MVC 3插件.
所以我的问题是为什么用它来构建一个?如果是这样的话你怎么设置它?
所以上面是我回答的问题的链接.
ninject-2 ×10
ninject ×5
c# ×4
asp.net-mvc ×2
.net ×1
binding ×1
inheritance ×1
moq ×1
mvccontrib ×1
nhibernate ×1
nunit ×1
unit-of-work ×1
unit-testing ×1