0

我正在實施DI,UnitOfWork和存儲庫模式如下:我需要你的專家opnions這個實現,我也面臨錯誤。單元工作模式和統一和通用存儲庫實現


**Business Domain(Class Lib)** 
-Contracts 
    -IWelcomeService.cs 
-Repositories 
    -BaseRepository.cs 
    -DataRepository.cs 
    -IDataRepository.cs 

**EF project Lib (I have autogenerated code for Existing Oracle DB)** 
-MyEntities.cs (This is additional file I have added for IUnitOfWork implementation 

**MVC3 Project (Left default folders for simplicity)** 
-Factories 
    - UnityDependencyResolver.cs 
UnityContainerSetup.cs 

規範這些自定義實現如下

個MyEntities.cs

public partial class MyEntities : ObjectContext, IUnitOfWork 
{ 
    #region IUnitOfWork Members 

    public void Save() 
    { 
     base.SaveChanges(); 
    } 

    #endregion 
} 

IWelcomeService.cs

public interface IWelcomeService 
{ 
    string GetMessage(); 
} 

BaseRepository.cs

public class BaseRepository 
{ 
    protected IUnitOfWork UnitOfWork { get; set; } 

    public BaseRepository(IUnitOfWork unitOfWork) 
    { 
     this.UnitOfWork = unitOfWork; 
    }   
} 

public interface IUnitOfWork 
{ 
    void Save(); 
} 

DataRepository.cs

public class DataRepository : BaseRepository, IDataRepository 
{ 
    public DataRepository(IUnitOfWork unitOfWork) 
     : base(unitOfWork) 
    { 

    } 

    #region IDataRepository Members 

    public string ChangeMessage() 
    { 
     return "Changed by repository"; 
    } 

    #endregion 
} 

IDataRepository.cs

public interface IDataRepository 
{ 
    string ChangeMessage(); 
} 

UnityDependencyResolver.cs

public class UnityDependencyResolver : IDependencyResolver 
{ 
    IUnityContainer _container; 

    public UnityDependencyResolver(IUnityContainer container) 
    { 
     _container = container; 
    } 

    #region IDependencyResolver Members 

    public object GetService(Type serviceType) 
    { 
     object instance; 

     try 
     { 
      instance = _container.Resolve(serviceType); 

      if (serviceType.IsAbstract || serviceType.IsInterface) 
       return null; 

      return instance; 
     } 
     catch (Exception) 
     { 
      return null; 
     } 
    } 

    public IEnumerable<object> GetServices(Type serviceType) 
    { 
     return _container.ResolveAll(serviceType); 
    } 

    #endregion 
} 

UnityContainerSetup.cs

public static void Setup() 
    { 
     var container = new UnityContainer(); 
     container.RegisterType<IWelcomeService, WelcomeServices>(); 
     container.RegisterType<IDataRepository, DataRepository>(); 
     DependencyResolver.SetResolver(new UnityDependencyResolver(container)); 
    } 

HomeController.cs 公共類HomeController的:控制 { 私人IWelcomeService _service;

public HomeController(IWelcomeService service) 
    { 
     _service = service; 
    } 

    public ActionResult Index() 
    { 
     ViewBag.Message = _service.GetMessage(); 

     return View(); 
    } 

    public ActionResult About() 
    { 
     return View(); 
    } 
} 

問題: 當我跑我得到以下錯誤的應用程序: 何時開始的UnitOfWork:

問題「這個對象定義無參數的構造函數」?如何在設置統一容器時注入IUnitOfWork?

+0

我有同樣的問題,是你能找出一個解決方案嗎? – kerzek 2012-09-30 09:01:14

回答

相關問題