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的应用的更多相关文章

  1. ASP.NET MVC中使用Ninject

    ASP.NET MVC中使用Ninject 在[ASP.NET MVC 小牛之路]系列上一篇文章(依赖注入(DI)和Ninject)的末尾提到了在ASP.NET MVC中使用Ninject要做的两件事 ...

  2. Asp.net MVC 中使用 Ninject 实现依赖注入

    松耦合.针对抽象编程.不针对实现编程是面向对象设计的原则.依赖注入就是,在一个类的内部,不通过创建对象的实例而能够获得实现了某个公开接口的对象引用.所谓的控制反转也是相同的意思.把依赖的创建转移到了使 ...

  3. 如何在 ASP.NET MVC 中集成 AngularJS(3)

    今天来为大家介绍如何在 ASP.NET MVC 中集成 AngularJS 的最后一部分内容. 调试路由表 - HTML 缓存清除 就在我以为示例应用程序完成之后,我意识到,我必须提供两个版本的路由表 ...

  4. 如何在 ASP.NET MVC 中集成 AngularJS(1)

    介绍 当涉及到计算机软件的开发时,我想运用所有的最新技术.例如,前端使用最新的 JavaScript 技术,服务器端使用最新的基于 REST 的 Web API 服务.另外,还有最新的数据库技术.最新 ...

  5. [转]ASP.NET MVC中你必须知道的13个扩展点

    本文转自:http://www.cnblogs.com/ejiyuan/archive/2010/03/09/1681442.html ScottGu在其最新的博文中推荐了Simone Chiaret ...

  6. NPOI以及在ASP.NET MVC中的使用

    NPOI以及在ASP.NET MVC中的使用 1.前言 相信大家在工作中经常要遇到一些导入导出Execl操作.学习贵在分享,分享使人快乐,园子里的前辈已经有很多好的文章,鄙人也是能力有限,在这里把这些 ...

  7. IOC 容器在 ASP.NET MVC 中的应用

    IOC 容器在 ASP.NET MVC 中的应用 IOC:Inversion Of Control 翻译为控制反转,我们在面向对象软件开发过程中,一个应用程序它的底层结构可能由N种不同的构件来相互协作 ...

  8. ASP.NET MVC中你必须知道的13个扩展点

         ScottGu在其最新的博文中推荐了Simone Chiaretta的文章13 ASP.NET MVC extensibility points you have to know,该文章为我 ...

  9. C# 动态生成word文档 [C#学习笔记3]关于Main(string[ ] args)中args命令行参数 实现DataTables搜索框查询结果高亮显示 二维码神器QRCoder Asp.net MVC 中 CodeFirst 开发模式实例

    C# 动态生成word文档 本文以一个简单的小例子,简述利用C#语言开发word表格相关的知识,仅供学习分享使用,如有不足之处,还请指正. 在工程中引用word的动态库 在项目中,点击项目名称右键-- ...

随机推荐

  1. discuz 7.2 faq.php sql注入了一些研究

    6.2号码(可能更早)上网本见exp,是一家discuz 7.2的sql注入漏洞 经过反复研究.最高在线人数exp它们存在于这些或那些问题,经过我自己的使用和变更摘要,使用的方法如以下: Discuz ...

  2. 你的Java代码对JIT编译友好么?(转)

    JIT编译器是Java虚拟机(以下简称JVM)中效率最高并且最重要的组成部分之一.但是很多的程序并没有充分利用JIT的高性能优化能力,很多开发者甚至也并不清楚他们的程序有效利用JIT的程度. 在本文中 ...

  3. mysql 在创建批处理脚本日志表信息

    mysql在批处理脚本通过存储过程如下所示创建日志信息表: drop PROCEDURE if EXISTS reqSp; DELIMITER // create procedure reqSp(sT ...

  4. 安装Team Foundation Server 2012过程截图

    原文:安装Team Foundation Server 2012过程截图 专题图 1,下载Team Foundation Server 2012  官方下载: http://www.microsoft ...

  5. 一旦rhel5.8造成只读文件系统ORA-00354: corrupt redo log block header

    一旦rhel5.8造成只读文件系统ORA-00354: corrupt redo log block header Wed Jun 03 03:31:24 CST 2015 Thread 1 adva ...

  6. linux安装和配置 mysql、redis 过程中遇到的问题记录(转)

    章节目录 mysql redis linux下部署mysql和redis网上的教程很多,这里记录一下我部署.配置的过程中遇到的一些问题和解决办法. mysql ①安装完成后启动的时候报错 Starti ...

  7. C#如何设置session过期时间

    1.操作系统  步骤:开始——〉管理工具——〉Internet信息服务(IIS)管理器——〉网站——〉默认网站——〉  右键“属性”——〉主目录——〉配置——〉选项——〉启用会话状态——〉会话超时(在 ...

  8. Android dumpsys命令的使用

    Android提供的dumpsys工具能够用于查看手机中的应用程序和系统服务信息与状态,手机连接电脑后能够直接命令行运行adb shell dumpsys 查看全部支持的Service可是这样输出的太 ...

  9. 使用CNN(convolutional neural nets)关键的一点是检测到的面部教程(四):学习率,学习潜能,dropout

    第七部分 让 学习率 和 学习潜能 随时间的变化 光训练就花了一个小时的时间.等结果并非一个令人心情愉快的事情.这一部分.我们将讨论将两个技巧结合让网络训练的更快! 直觉上的解决的方法是,開始训练时取 ...

  10. 阅读《大数据》Tuzipeizhe

    一本好书.4/5明星. 内容:引进美国和信息,相关历史资料.从建国,为了连任奥巴马. 它是引入大型数据在美国,如何从头开始. 的流逝,到近期几年.这股影响美国的大数据 是怎样走入世界,影响各国的. 英 ...