ASP.NET依存注入.

7183 ワード

ASP.NET依存注入。
http://www.it165.net/pro/html/201407/17685.html
私はネット上でこの文章を見ましたが、こちらの文章は主にプロファイルを読み取ることで依存注入の問題を解決する方法です.しかし、注入に依存するクラスを新規作成するたびに、設計モードの開閉原則に合致しないプロファイルを変更します.まず一般的な解法を見てみましょう.
 
1
2
3 //var container = new UnityContainer(); //container.RegisterType(typeof(IRegisterService), typeof(RegisterService)); //IRegisterService ins = (IRegisterService)container.Resolve(typeof(IRegisterService));
そこで、その中のクラスを汎用クラスに置き換えればいいと思いますが、これはどう書きますか.簡単です.共通の静的メソッドを新規作成し、使用するときにこのメソッドを呼び出せばいいです.以下は公共の方法で私が書いたので、みんなは違いを見たいと思って、私はみんなにCONFIGファイルを呼び出すことと直接汎用の違いを見て、複数の汎用クラスの書き方に注意します:
using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Configuration;

using Microsoft.Practices.Unity;

using System.Configuration;

using System.Xml;

using Microsoft.Practices.Unity.Configuration;



namespace MapleStory2.Common

{

    public class UnityTool<IClass>  where IClass:class

    {



        /// <summary>

        ///         ,  web.config  

        /// </summary>

        public static IClass UnityConfiguration()

        {



            



            IUnityContainer container=new UnityContainer();



            Configuration config = DBUtil.GetConfig(System.Web.HttpContext.Current.Server.MapPath("~/MapleStory2.Common/unity.config"));



            UnityConfigurationSection seciton = (UnityConfigurationSection)config.GetSection("unity");



            container.LoadConfiguration(seciton, "FirstClass");



           IClass classInfo= container.Resolve<IClass>("ec");

           return classInfo;

        

        }





    }



    /// <summary>

    ///    config    

    /// </summary>

    /// <typeparam name="IClass">   </typeparam>

    /// <typeparam name="cbClass">     </typeparam>

    public class UnityHelper<IClass, cbClass>

        where IClass : class

        where cbClass : class

    {

        public static IClass UnityUnitTest()

        {

            var container = new UnityContainer();

            container.RegisterType(typeof(IClass), typeof(cbClass));

            IClass ins = (IClass)container.Resolve(typeof(IClass));



            return ins;

        

        }









    }

   



}


 
コントロールで呼び出せばいいのですが、
using System;

using System.Collections.Generic;

using System.Linq;

using System.Web;

using System.Web.Mvc;

using Microsoft.Practices.Unity;

using MapleStory2.IDAL.Account;

using MapleStory2.Model;

using MapleStory2.Model.Models;

using MapleStory2.DAL.Account;

using MapleStory2.Common;



namespace MapleStory2.Controllers

{

    public class RegisterController : Controller

    {





        [Dependency]

        public IRegisterService registerService { get; set; }





        //

        // GET: /Register/



        public ActionResult Index()

        {



            return View();

        }



        [HttpPost]

        [ValidateAntiForgeryToken]

        public ActionResult Register(UserQueryData user)

        {

            //    ,  :

            //https://msdn.microsoft.com/en-us/library/ff650319.aspx

            //var container = new UnityContainer();

            //container.RegisterType(typeof(IRegisterService), typeof(RegisterService));

            //IRegisterService ins = (IRegisterService)container.Resolve(typeof(IRegisterService));



            //       --  WEB.CONFIG  

           // registerService = UnityTool<IRegisterService>.UnityConfiguration();



            //       --   WEB.CONFIG  

            registerService = UnityHelper<IRegisterService, RegisterService>.UnityUnitTest();







            if (ModelState.IsValid)

            {

                bool flag = registerService.AddNormalUser(user); //      

                //int count = 0;

                //using (maplestory2Context mc = new maplestory2Context())

                //{

                //    string userId = Guid.NewGuid().ToString();



                //    //         

                //    mc.Users.Add(new User

                //    {

                //        ID = userId,

                //        UserName = user.UserName,

                //        Password = user.Password,

                //        NickName = user.UserName,

                //        RegDate = DateTime.Now,

                //        SortCode = 0

                //    });



                //    //count = mc.SaveChanges();



                //    //           

                //    mc.UserDetails.Add(new UserDetail()

                //    {

                //        DetailID = Guid.NewGuid().ToString(),

                //        DetailType = 0,

                //        BornLocation = user.BornLocation,

                //        UserID = userId,

                //        UserName = user.UserName



                //    });



                //    count = mc.SaveChanges();

                //}



                //if (count > 0)

                //{

                //    ModelState.Clear();

                //    user = null;

                //    ViewBag.Message = "    ";

                //}



                if (flag)

                {

                    ModelState.Clear();

                    user = null;

                    ViewBag.Message = "    ";

                }

            }



            return View("Index");

        }



    }

}


このように簡単ですが、考えにくいです.ところで、プログラムセットの物理アドレスを見つけるにはどうすればいいか教えてください.
ASP.NET 依赖注入。
例えばこのunity.configファイルは、サイトの中ではなくcode libraryの中で、私はServerを通過できません.mappathかAssemblyの方法で位置決めしましょう
ASP.NET 依赖注入。著者:KMSFan出典:http://www.cnblogs.com/kmsfan