我尝试用Ninject创建应用程序.我有一个MainForm用于设置的对话框表单.我应该如何实现这个?应该MainForm有一个Kernel实例,然后SettingsForm用Get<SettingsForm>()方法创建?或者MainForm构造函数应该具有SettingsForm实例参数?
我尝试用ninject找到一些WinForm应用程序的例子,但我发现只有一些ASP.NET应用程序在Visual C#2008 express中没用.
我正在尝试将Ninject与我的Windows应用程序一起使用(C#,VS 2010).构建应用程序时出错:
引用的程序集"Ninject"无法解析,因为它依赖于"System.Web,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a",这不在当前目标框架中".NETFramework,Version = v4 0.0,档案=客户端".
我试图将System.Web添加到引用,但我还有更多其他错误.
请帮忙.
假设我有3个程序集,Example.Core,Example.Contracts,Example.WcfServices.在我的契约程序集中,我定义了一个接口并添加了一些操作,例如ICalculator,它具有Add(double a,double b)操作.在我的WcfServices程序集中,我将ICalculator实现为Wcf服务.
现在我的问题是这个......在我的Example.Core程序集中,如何在保持所有内容解耦的同时对该接口进行编程(以允许我有一个替代的接口实现).如果我有一个需要ICalculator的类,我可以创建一个来自ChannelFactory并使用它,或者我可以在构造函数中注入一个实例.如果我在课堂上创建一个,那么我在ChannelFactory/Wcf中将依赖项放在我的班级中,我真的不想这样做.如果我在构造函数中注入一个实例,那么注入类将如何管理和整理wcf服务?似乎虽然我有一个界面,但我没有干净的使用方法.我已经看过像NInject这样的东西了,但我不相信如果它出现故障会清理ChannelFactory(至少我没有发现任何文档显示它知道何时调用Abort而不是在通道上关闭).
我最终做的是再次实现我的界面并使用此问题中描述的方法:创建WCF ChannelFactory <T>并只调用服务上的方法.这对我来说有点"闻起来",因为我再次包裹所有的电话只是为了确保通道正确关闭/中止.
有没有任何模式/方法干净地有两个接口的实现,其中一个是Wcf服务?
谢谢,
麦克风.
当我们将依赖项注入控制器和模型时,我并不完全理解幕后发生的事情.
我有以下控制器:
public class TypeController : CommonController
{
private ILookUpService lookUpService;
public TypeController(ILookUpService lookUpService)
{
this.lookUpService = lookUpService;
}
}
Run Code Online (Sandbox Code Playgroud)
应用程序启动时,查找服务已经可用.所以我想在幕后的某个地方我们有代码就行了
TypeController controller = new TypeController(service);
Run Code Online (Sandbox Code Playgroud)
或与工厂有关(我需要阅读).
当将服务注入到视图模型中时,它不起作用,因为我需要在不将接口传递给我的服务的情况下调用空构造函数.
那么幕后发生了什么?如何将服务注入视图模型?我想我错过了一些真正的根本性东西,它阻止我做我需要的东西.
我已将FactoryPattern包含在标签中,因为我的直觉告诉我它与我的问题有关.
谢谢
我正在尝试使用Ninject来管理对象的生命周期.对于我的IRepository对象,我要求实现IDisposable,并且在ConcreteRepository中,我已经实现了IDisposable来杀死我的NHibernateSession.
我的问题是我还在ConcreteRepository中放置了一个静态变量来计算ConcreteRepository的实例化和析构/处理的数量......当我运行应用程序时,我的数据库连接用完了,我的日志是显示我的应用程序永远不会释放我的连接.
我的Global.asax:
public class Global : NinjectHttpApplication
{
protected override void OnApplicationStarted()
{
base.OnApplicationStarted();
AreaRegistration.RegisterAllAreas();
RegisterGlobalFilters(GlobalFilters.Filters);
RegisterRoutes(RouteTable.Routes);
ControllerBuilder.Current.DefaultNamespaces.Add("WebPortal.Controllers");
var log4netConfigFileInfo = new System.IO.FileInfo(Server.MapPath("~/log4net.xml"));
log4net.Config.XmlConfigurator.ConfigureAndWatch(log4netConfigFileInfo);
log4net.ILog log = log4net.LogManager.GetLogger(typeof(Global));
log.Info("Started...");
}
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new HandleErrorAttribute());
}
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
}
protected override Ninject.IKernel CreateKernel()
{
var …Run Code Online (Sandbox Code Playgroud) 我正在尝试部署一个使用Ninject for DI的网站,该网站在我的开发机器上本地运行良好(不是全部!).当部署到我的主机(使用visual studio ftp发布选项)时,我收到以下错误:
Method not found: 'System.Delegate System.Reflection.MethodInfo.CreateDelegate(System.Type)'.
Run Code Online (Sandbox Code Playgroud)
和
[InvalidOperationException: An error occurred when trying to create a controller of type 'Website.Controllers.HomeController'. Make sure that the controller has a parameterless public constructor.]
Run Code Online (Sandbox Code Playgroud)
查看堆栈跟踪,看起来NinjectDependencyResolver.GetService(Type serviceType)是失败的方法.正如我所说,它在当地的工作正常,所以不知道在哪里或如何处理这个.谷歌没有提出任何有用的东西.
如果那是相关的,我正在使用Ninject 3.0.1.10.
编辑:我已经添加了无参数的构造函数到homecontroller,但它没有任何区别,并存在相同的错误....
我有与Ninject相同的问题- 静态类中的内核? 但我没有使用WCF,只是一个类库.
拥有静态内核或在任何时候实例化它更好吗?我的UI(现在在MVC应用程序中)使用该服务,所以它会调用静态内核吗?什么是最好的方法?
我怎么能转换这个:
For<ISession>().Use(ctx => {
var uow = (INHibernateUnitOfWork)ctx.GetInstance<IUnitOfWork>();
return uow.Session;
});
Run Code Online (Sandbox Code Playgroud)
对Ninject?
我能够转换这个:
For<ISessionSource>().Singleton().Use<NHibernateSessionSource>();
Run Code Online (Sandbox Code Playgroud)
至
Bind<ISessionSource>()
.To<NHibernateSessionSource>()
.InSingletonScope()
Run Code Online (Sandbox Code Playgroud)
我想我也可以转换这个:
For<IUnitOfWork>().HybridHttpOrThreadLocalScoped().Use<NHibernateUnitOfWork>();
Run Code Online (Sandbox Code Playgroud)
至
Bind<IUnitOfWork>().To<NHibernateUnitOfWork>().InThreadScope();
Run Code Online (Sandbox Code Playgroud)
我知道这些并非都是一对一的,但我可以得到一些帮助吗?
我刚刚开始在我们的MVC 4项目中探索SignalR.我想做的其中一件事是将Ninject DI添加到我们的Hub类中.两个问题:
1)我找到并安装了SignalR.Ninject,但是这样做了,我不太清楚我用它做了什么.我尝试将以下行添加到AppStart NinjectWebCommon文件中的RegisterServices()方法,但这会产生编译错误.
private static void RegisterServices(IKernel kernel)
{
kernel.Load(
new Repositories.AssetModule()
);
GlobalHost.DependencyResolver = new
SignalR.Ninject.NinjectDependencyResolver(kernel);
}
Run Code Online (Sandbox Code Playgroud)
2)一旦正确配置,我可以使用Hub类的构造函数注入,还是需要使用[Inject]属性的属性注入?
任何方向都会非常感激.
我在我的应用程序中使用了ninject IoC,特别是以下内容:
kernel.Bind<RepositoryFactories>().To<RepositoryFactories>()
.InSingletonScope();
Run Code Online (Sandbox Code Playgroud)
我想使用Unity IoC实现这一点,但是有人可以告诉我如何使它成为同样的,它的含义是什么"InSingletonScope()"?以下工作,但我担心它没有正确完成,因为可能需要指定Singleton.
container.RegisterType<RepositoryFactories, RepositoryFactories>();
Run Code Online (Sandbox Code Playgroud)