Как использовать DependencyInjection в GenericRepository и UnitOfWork - PullRequest
0 голосов
/ 15 января 2019

У меня есть проект WindowsForm С этим дизайном:
DAL (GenericRepository => UnitOfWork) => BLL (Служба) => UI
И используйте EntityFramWork, Интерфейс, GenericRepository, Внедрение зависимостей

Мой код в репозитории (DAL):

public class Repository : RepositoryBase, IDisposable, IRepository where T : class  
{  
       private readonly DbSet dbSet;  
       private bool disposed = false;
       public Repository(GlobalERPEntities dbContext)  
       {  
           DBContext = dbContext;  
           dbSet = DBContext.Set();  
       }    
       public virtual IEnumerable GetAll()  
       {  
           return dbSet.ToList();  
       } 
} 

UnitOfWork (DAL):

public class UnitOfWork : RepositoryBase, IUnitOfWork, IDisposable  
   {  
       private Dictionaryobject> repositories;  
       private bool disposed = false;  

       public UnitOfWork(GlobalERPEntities dbContext)  
       {  
           DBContext = dbContext;  
       }  

       public IRepository Repository() where T : class  
       {  
           if (repositories == null)  
           {  
               repositories = new Dictionaryobject>();  
           }  

           if (repositories.Keys.Contains(typeof(T)) == true)  
           {  
               return repositories[typeof(T)] as Repository;  
           }  
           Repository repo = new Repository(DBContext);  
           repositories.Add(typeof(T), repo);  
           return repo;  
       } 

Сервис (BLL):

public class Service_HR_Person : IService_HR_Person ,  IDisposable  
   {  
       private readonly IUnitOfWork UnitOfWork;  

       public Service_HR_Person(IUnitOfWork unitOfWork)  
       {  
           UnitOfWork = unitOfWork;  
       }  

       public virtual IEnumerable GetAll()  
       {  
           return UnitOfWork.Repository().GetAll().ToList();  
       } 

MyForm (UI):

using (Service_HR_Person srvPerson = new Service_HR_Person())  
               {  
                   srvPerson.Delete(base.rowid);  
                   try  
                   {  
                       srvPerson.Save();
                       MessageManager.Show(Enums.MessageBoxType.InformationTransactionSuccessfully);  
                   }  
                   catch (Exception ex)  
                   {  
                       MessageManager.Show(ErrorManager.ProccessException(ex), Enums.MessageBoxType.Error);  
                   }  
               }  

Я знаю, что не следует использовать слой DAL на уровне пользовательского интерфейса, а BLL находится между DAL и UI но у меня есть ошибка в пользовательском интерфейсе

using (Service_HR_Person srvPerson = new Service_HR_Person())

"new Service_HR_Person ()", скажем, нужен аргумент в (), который является unitofwork, но мы не должны использовать unitofwork в UI

Я прочитал статью и пример, в которых используются IOC, ninject, bootstraper и ... но я не могу написать настоящий код
Как использовать Ninject или IOC?
пожалуйста, помогите мне с кодом
* 1026 большое спасибо *

1 Ответ

0 голосов
/ 16 января 2019

добавить новый проект в решение с именем «Настроить»
добавить castle.windsor из NuGet ко всему проекту
добавить класс к этому проекту с именем "Bootstrapper" и написать этот код

public static WindsorContainer Container = null;

   public static void WireUp()
   {
                    Container = new WindsorContainer();
                    Container.Register(Component.For<GlobalERPEntities>());
                    Container.Register(Component.For<IUnitOfWork>().ImplementedBy<UnitOfWork>());
                    Container.Register(Component.For<IService_HR_Person>().ImplementedBy<Service_HR_Person>());
   }

и редактируйте свой код в пользовательском интерфейсе

 using (Service_HR_Person srvPerson = Bootstrapper.Container.Resolve<Service_HR_Person>())
                {
                    srvPerson.Delete(base.rowid);
                    try
                    {
                        srvPerson.Save();
                        RemoveRow();
                        MessageManager.Show(Enums.MessageBoxType.InformationTransactionSuccessfully);
                    }
                    catch (Exception ex)
                    {
                        MessageManager.Show(ErrorManager.ProccessException(ex), Enums.MessageBoxType.Error);
                    }
                }

эта строка

 using (Service_HR_Person srvPerson = Bootstrapper.Container.Resolve<Service_HR_Person>())

и отредактируйте Program.cs с этим кодом

 static void Main(string[] argss)
        {
            Bootstrapper.WireUp();

это работа в основном

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...