Ninject 在 Winform、 Asp.net MVC中连络EntityFramework的应用
Ninject 在 Winform、 Asp.net MVC中连络EntityFramework的应用( 注入同一个DbContext的应用名人名言:科学是老老实实的东西,它要靠许许多多人民的劳动和智慧积累起来。——李四光
Ninject 在 Winform、 Asp.net MVC 中连络EntityFramework的应用( 注入同一个DbContext的应用办法)
Demo顶用到了 RepositoryT.dll, RepositoryT.EntityFramework.dll,Ninject.dll,Ninject.Web.MVC.dll, Ninject.Web.Common.dll
应用到的自定义类:
//营业相干的类
DataAccessRepository.cs
IDataAccessRepository.cs
//Ninject相干的类
DataAccessNinjectModule.cs
DataAccessKernelBase.cs
具体内容:
//营业相干的类
IDataAccessRepository.cs
using RepositoryT.Infrastructure;
using System;
using System.Collections.Generic;
using System.Data.Entity.Infrastructure;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace DataAccess
{
public interface IDataAccessRepository<TEntity> : IRepository<TEntity> where TEntity : class
{
DbEntityEntry GetDbEntityEntry(TEntity entity);
}
}
DataAccessRepository.cs
using RepositoryT.EntityFramework;
using RepositoryT.Infrastructure;
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Entity;
using System.Data.Entity.Infrastructure;
using System.Linq;
using System.Linq.Expressions;
using System.Text;
using System.Threading.Tasks; namespace DataAccess
{
public class DataAccessRepository<T, TContext> : RepositoryBase<TContext>, IDataAccessRepository<T>
where T : class
where TContext : class, IDbContext, IDisposable
{ private readonly IDbSet<T> _dbset;
public DataAccessRepository(IDataContextFactory<TContext> databaseFactory) :
base(databaseFactory)
{
_dbset = DataContext.Set<T>();
} public virtual void Add(T entity)
{
_dbset.Add(entity);
}
public DbEntityEntry GetDbEntityEntry(T entity)
{
return DataContext.Entry(entity);
}
}
}
//Ninject相干的类
DataAccessNinjectModule.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Ninject.Modules;
using DataEntities;
using Ninject.Activation;
using Ninject;
using RepositoryT.EntityFramework;
using RepositoryT.Infrastructure; namespace DataAccess
{
public class DataAccessNinjectModule : NinjectModule
{
public override void Load()
{
var testNinjectEntities = new TestNinjectEntities();
//Kernel.Bind<ILoginRepository>()
// .To<LoginRepository>(); var factory = new DefaultDataContextFactory<TestNinjectEntities>(); Kernel.Bind<IDataAccessRepository<Login>>()
.To<DataAccessRepository<Login, TestNinjectEntities>>()
.InSingletonScope()
.WithConstructorArgument("databaseFactory",
factory); Kernel.Bind<IUnitOfWork>()
.To<UnitOfWork<TestNinjectEntities>>()
.InSingletonScope()
.WithConstructorArgument("databaseFactory",
factory); }
}
}
DataAccessKernelBase.cs
//Winform 调用
Program.cs
namespace WindowsFormsApplication
{
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false); var kernel = new StandardKernel(new DataAccessNinjectModule()); var form = kernel.Get<Form1>(); Application.Run(form);
}
}
}
Form1 .cs
using DataAccess;
using DataEntities;
using RepositoryT.Infrastructure;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms; namespace WindowsFormsApplication
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
} IDataAccessRepository<Login> _DataAccessRepository;
IUnitOfWork _UnitOfWork; public Form1(IDataAccessRepository<Login> dataAccessRepository,
IUnitOfWork unitOfWork)
{
_DataAccessRepository = dataAccessRepository;
_UnitOfWork = unitOfWork; if (_DataAccessRepository != null &&
_UnitOfWork != null)
{
var b = true;
try
{
_DataAccessRepository.Add(new DataEntities.Login()
{
UserName = "Admin",
Password = "123",
}); _UnitOfWork.Commit();
}
catch (Exception)
{
b = false;
}
}
}
}
}
ASP.NET MVC中应用:
[Authorize]
public class AccountController : Controller
{ IDataAccessRepository<Login> _LoginDataAccessRepository;
IUnitOfWork _UnitOfWork; public AccountController(IDataAccessRepository<Login> loginDataAccessRepository,
IUnitOfWork unitOfWork)
{
_LoginDataAccessRepository = loginDataAccessRepository;
_UnitOfWork = unitOfWork;
}
public ActionResult Save(LoginModel model, string returnUrl)
{
var b = true;
try
{
_LoginDataAccessRepository.Add(new DataEntities.Login()
{
UserName = model.UserName,
Password = model.Password,
}); _UnitOfWork.Commit();
}
catch (Exception)
{
b = false;
}
if (b)
{
return RedirectToLocal("http://www.ideaam.com");
} // If we got this far, something failed, redisplay form
ModelState.AddModelError("", "The user name or password provided is incorrect.");
return View(model);
}
}
/App_Start/NinjectWebCommon.cs
[assembly: WebActivator.PreApplicationStartMethod(typeof(MvcApplication.App_Start.NinjectWebCommon), "Start")]
[assembly: WebActivator.ApplicationShutdownMethodAttribute(typeof(MvcApplication.App_Start.NinjectWebCommon), "Stop")] namespace MvcApplication.App_Start
{
using System;
using System.Web; using Microsoft.Web.Infrastructure.DynamicModuleHelper; using Ninject;
using Ninject.Web.Common;
using Service;
using RepositoryT.EntityFramework;
using DataAccess;
using DataEntities;
using RepositoryT.Infrastructure; public static class NinjectWebCommon
{
private static readonly Bootstrapper bootstrapper = new Bootstrapper(); /// <summary>
/// Starts the application
/// </summary>
public static void Start()
{
DynamicModuleUtility.RegisterModule(typeof(OnePerRequestHttpModule));
DynamicModuleUtility.RegisterModule(typeof(NinjectHttpModule));
bootstrapper.Initialize(CreateKernel);
} /// <summary>
/// Stops the application.
/// </summary>
public static void Stop()
{
bootstrapper.ShutDown();
} /// <summary>
/// Creates the kernel that will manage your application.
/// </summary>
/// <returns>The created kernel.</returns>
private static IKernel CreateKernel()
{
var kernel = new StandardKernel();
kernel.Bind<Func<IKernel>>().ToMethod(ctx => () => new Bootstrapper().Kernel);
kernel.Bind<IHttpModule>().To<HttpApplicationInitializationHttpModule>(); RegisterServices(kernel);
return kernel;
} /// <summary>
/// Load your modules or register your services here!
/// </summary>
/// <param name="kernel">The kernel.</param>
private static void RegisterServices(IKernel kernel)
{
var factory = new DefaultDataContextFactory<TestNinjectEntities>(); kernel.Bind<IDataAccessRepository<Login>>()
.To<DataAccessRepository<Login, TestNinjectEntities>>()
.InRequestScope()
.WithConstructorArgument("databaseFactory",
factory); kernel.Bind<IUnitOfWork>()
.To<UnitOfWork<TestNinjectEntities>>()
.InRequestScope()
.WithConstructorArgument("databaseFactory", factory);
}
}
}
Ninject 在 Winform、 Asp.net MVC中连络EntityFramework的应用的更多相关文章
- ASP.NET MVC中使用Ninject
ASP.NET MVC中使用Ninject 在[ASP.NET MVC 小牛之路]系列上一篇文章(依赖注入(DI)和Ninject)的末尾提到了在ASP.NET MVC中使用Ninject要做的两件事 ...
- Asp.net MVC 中使用 Ninject 实现依赖注入
松耦合.针对抽象编程.不针对实现编程是面向对象设计的原则.依赖注入就是,在一个类的内部,不通过创建对象的实例而能够获得实现了某个公开接口的对象引用.所谓的控制反转也是相同的意思.把依赖的创建转移到了使 ...
- 如何在 ASP.NET MVC 中集成 AngularJS(3)
今天来为大家介绍如何在 ASP.NET MVC 中集成 AngularJS 的最后一部分内容. 调试路由表 - HTML 缓存清除 就在我以为示例应用程序完成之后,我意识到,我必须提供两个版本的路由表 ...
- 如何在 ASP.NET MVC 中集成 AngularJS(1)
介绍 当涉及到计算机软件的开发时,我想运用所有的最新技术.例如,前端使用最新的 JavaScript 技术,服务器端使用最新的基于 REST 的 Web API 服务.另外,还有最新的数据库技术.最新 ...
- [转]ASP.NET MVC中你必须知道的13个扩展点
本文转自:http://www.cnblogs.com/ejiyuan/archive/2010/03/09/1681442.html ScottGu在其最新的博文中推荐了Simone Chiaret ...
- NPOI以及在ASP.NET MVC中的使用
NPOI以及在ASP.NET MVC中的使用 1.前言 相信大家在工作中经常要遇到一些导入导出Execl操作.学习贵在分享,分享使人快乐,园子里的前辈已经有很多好的文章,鄙人也是能力有限,在这里把这些 ...
- IOC 容器在 ASP.NET MVC 中的应用
IOC 容器在 ASP.NET MVC 中的应用 IOC:Inversion Of Control 翻译为控制反转,我们在面向对象软件开发过程中,一个应用程序它的底层结构可能由N种不同的构件来相互协作 ...
- ASP.NET MVC中你必须知道的13个扩展点
ScottGu在其最新的博文中推荐了Simone Chiaretta的文章13 ASP.NET MVC extensibility points you have to know,该文章为我 ...
- C# 动态生成word文档 [C#学习笔记3]关于Main(string[ ] args)中args命令行参数 实现DataTables搜索框查询结果高亮显示 二维码神器QRCoder Asp.net MVC 中 CodeFirst 开发模式实例
C# 动态生成word文档 本文以一个简单的小例子,简述利用C#语言开发word表格相关的知识,仅供学习分享使用,如有不足之处,还请指正. 在工程中引用word的动态库 在项目中,点击项目名称右键-- ...
随机推荐
- cocos2d-x教程2:在windows下怎样批量转换pvr,ccz为png或jpg
这是一个非经常见的功能,可是找了全网,竟然找不到,于是借鉴别人的批处理文件,改了下,就能够把整个文件夹的所有一次批量转换. 将这个bat文件暂定为,myConvert.bat,运行时就把这个bat文件 ...
- Chromium Graphics Update in 2014(滑动)
原创文章,转载请注明为链接原始来源对于http://blog.csdn.net/hongbomin/article/details/40897433. 摘要:Chromium图形栈在2014年有多项改 ...
- asp.net学习之ado.net(无连接模式中的DataAdapter)
原文:asp.net学习之ado.net(无连接模式中的DataAdapter) 在非连接模式下,主要讨论以下对象:DataAdapter. DataAdpater的作用是在物理存储模式的数据 ...
- PL/SQL 9 许可证
code:j6stndb9tk72xfbhbqczcdqnjd8lyj466n number:882851 ps:xs374ca 我是PL/SQL版本号是: Version 9.0.3.1641 要注 ...
- Redux基础
Redux 是一个状态容器 Redux 就像是作者自己的介绍,它不会为你提供任何的东西,它不会告诉你如何做路由,它只专注于应用程序状态,是一个 JavasSript 的状态容器,所有的状态的变化都是当 ...
- Atitit.软体guibuttonand面板---通信子系统(范围)-- github 采用....
Atitit.软体guibuttonand面板---通讯子系统(区)-- github 的使用.... 1. 1.注冊账户以及创建仓库 1 2. 二.在GitHub中创建项目(create a new ...
- linux_mac_配置itrem2 rz sz_bug处理
0:传输 .jar 等文件有问题 是 添加 sz -bye 以二进制流方式传输 1:安装 homebrew 2: brew install lrzsz 3:搜索 iterm2-recv-zmod ...
- 2013级C++第13周(春)项目——继承的进一步话题与GUI应用开发
课程首页在:http://blog.csdn.net/sxhelijian/article/details/11890759,内有完整教学方案及资源链接 第一部分 程序阅读:阅读以下类的定义,请说出在 ...
- idea类似eclipse鼠标技巧java api信息
版权声明:本文博客原创文章,博客,未经同意,不得转载.
- 还是畅通project(杭州电1233)
还是畅通project Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Tota ...