برای شروع یک پروژه از نوع Console Application ایجاد کنید و یک ارجاع به Assemblyهای زیر رو در برنامه قرار بدید.
- Microsoft.Practices.ServiceLocation
- Microsoft.Practices.Unity
- Microsoft.Practices.EnterpriseLibrary.Common
اگر Assemblyهای بالا رو در اختیار ندارید میتونید اونها رو از اینجا دانلود کنید. Microsoft Enterprise Library یک کتابخانه تهیه شده توسط شرکت Microsoft است که شامل موارد زیر است و بعد از نصب میتونید در قسمتهای مختلف برنامه از اونها استفاده کنید.
- Enterprise Library Caching Application Block : یک CacheManager قدرتمند در اختیار ما قرار میده که میتونید از اون برای کش کردن دادهها استفاده کنید.
Enterprise Library Exception Handling Application Block : یک کتابخانه مناسب و راحت برای پیاده سازی یک Exception Handler در برنامهها است.
Enterprise Library Loggin Application Block : برای تهیه یک Log Manager در برنامه استفاده میشود.
Enterprise Library Validation Application Block : برای اجرای Validation برای Entityها با استفاده از Attribute میتونید از این قسمت استفاده کنید.
Enterprise Library DataAccess Application Block : یک کتابخانه قدرتمند برای ایجاد یک DataAccess Layer است با Performance بسیار بالا.- Enterprise Library Shared Library: برای استفاده از تمام موارد بالا در پروژه باید این Dll رو هم به پروژه Reference بدید. چون برای همشون مشترک است.
برای اجرای مثال ابتدا کلاس زیر رو به عنوان مدل وارد کنید.
public class Book { public string Title { get; set; } public string ISBN { get; set; } }
حالا باید Repository مربوطه رو تهیه کنید. ایتدا یک Interface به صورت زیر ایجاد کنید.
public interface IBookRepository { List<Book> GetBooks(); }
public class BookRepository : IBookRepository { public List<Book> GetBooks() { List<Book> listOfBooks = new List<Book>(); listOfBooks.AddRange( new Book[] { new Book(){Title="Book1" , ISBN="123"}, new Book(){Title="Book2" , ISBN="456"}, new Book(){Title="Book3" , ISBN="789"}, new Book(){Title="Book4" , ISBN="321"}, new Book(){Title="Book5" , ISBN="654"}, } ); return listOfBooks; } }
در مرحله بعد باید Service مربوطه برای استفاده از این Repository ایجاد کنید. ولی باید Repository رو به Constructor این کلاس Service پاس بدید. اما برای انجام این کار باید از ServiceLocator استفاده کنیم.
public class BookService { public BookService() : this( ServiceLocator.Current.GetInstance<IBookRepository>() ) { } public BookService( IBookRepository bookRepository ) { this.BookRepository = bookRepository; } public IBookRepository BookRepository { get; private set; } public void PrintAllBooks() { Console.WriteLine( "List Of All Books" ); BookRepository.GetBooks().ForEach( ( Book item ) => { Console.WriteLine( item.Title ); } ); } }
متد Print هم تمام کتابهای مربوطه رو برامون چاپ میکنه.
در مرحله آخر باید ServiceLocator رو تنظیم کنید. برای این کار کدهای زیر رو در کلاس Program قرار بدید.
class Program { static void Main( string[] args ) { IUnityContainer unityContainer = new UnityContainer(); unityContainer.RegisterType<IBookRepository, BookRepository>(); ServiceLocator.SetLocatorProvider( () => new UnityServiceLocator( unityContainer ) ); BookService service = new BookService(); service.PrintAllBooks(); Console.ReadLine(); } }
بعد از اجرای برنامه خروجی زیر قابل مشاهده است.