zoukankan      html  css  js  c++  java
  • 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);
    }

    }
    }
  • 相关阅读:
    [luoguP1437] [HNOI2004]敲砖块(DP)
    [luoguP2073] 送花(set)
    [luoguP1783] 海滩防御(二分 || 最短路 || 最小生成树)
    [luoguP3068] [USACO13JAN]派对邀请函Party Invitations(stl大乱交)
    [luoguP1849] [USACO12MAR]拖拉机Tractor(spfa)
    数组
    String
    学不会的JVM
    异常
    反射
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/3665536.html
Copyright © 2011-2022 走看看