いくつかのステップで簡単にASPを完成する.NET依存注入.
14566 ワード
http://www.it165.net/pro/html/201407/17685.html
私はネット上でこの文章を見ましたが、こちらの文章は主にプロファイルを読み取ることで依存注入の問題を解決する方法です.しかし、注入に依存するクラスを新規作成するたびに、設計モードの開閉原則に合致しないプロファイルを変更します.まず一般的な解法を見てみましょう.
そこで、その中のクラスを汎用クラスに置き換えればいいと思いますが、これはどう書きますか.簡単です.共通の静的メソッドを新規作成し、使用するときにこのメソッドを呼び出せばいいです.以下は公共の方法で私が書いたので、みんなは違いを見たいと思って、私はみんなにCONFIGファイルを呼び出すことと直接汎用の違いを見て、複数の汎用クラスの書き方に注意します:
コントロールで呼び出せばいいのですが、
このように簡単ですが、考えにくいです.ところで、プログラムセットの物理アドレスを見つけるにはどうすればいいか教えてください.
例えばこのunity.configファイルは、サイトの中ではなくcode libraryの中で、私はServerを通過できません.mappathかAssemblyの方法で位置決めしましょう
私はネット上でこの文章を見ましたが、こちらの文章は主にプロファイルを読み取ることで依存注入の問題を解決する方法です.しかし、注入に依存するクラスを新規作成するたびに、設計モードの開閉原則に合致しないプロファイルを変更します.まず一般的な解法を見てみましょう.
//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");
}
}
}
このように簡単ですが、考えにくいです.ところで、プログラムセットの物理アドレスを見つけるにはどうすればいいか教えてください.
例えばこのunity.configファイルは、サイトの中ではなくcode libraryの中で、私はServerを通過できません.mappathかAssemblyの方法で位置決めしましょう