2014-07-22 3 views
1
연합

에서 :유니티 InjectionConstructor 다음 C# 코드의의 Web.config 상응하는 무엇의 Web.config

container 
    .RegisterType<IRepositoryProvider, RepositoryProvider>(
     new PerRequestLifetimeManager(), 
     new InjectionConstructor(new object[] { new RepositoryFactories() }) 
    ); 

I 시도한 다음,하지만 작동하지 않았다 :

<register type="Repository.Pattern.Ef6.Factories.IRepositoryProvider, Repository.Pattern.Ef6" mapTo="Repository.Pattern.Ef6.Factories.RepositoryProvider, Repository.Pattern.Ef6"> 
    <lifetime type="Microsoft.Practices.Unity.PerRequestLifetimeManager, Microsoft.Practices.Unity.Mvc" /> 
    <constructor> 
     <param name="repositoryFactories" value="new object[]{new RepositoryFactories()}"/> 
    </constructor> 
</register> 

어려운 부분은 "new object [] {new RepositoryFactories()}"를 처리하는 방법입니다.

답변

0

설정이 적절하지 않다고 생각합니다. 종속성 attr이 필요합니다. 아래의 샘플을보십시오.

유니티 구성 :

<unity xmlns="http://schemas.microsoft.com/practices/2010/unity"> 
<namespace name="ConsoleApplication8" /> 
<assembly name="ConsoleApplication8" /> 
<container name="MyContainer"> 
    <types> 
    <type type="ConsoleApplication8.IRepositoryFactories, ConsoleApplication8" 
      mapTo="ConsoleApplication8.RepositoryFactories, 
      ConsoleApplication8" /> 
    <type type="ConsoleApplication8.IRepositoryProvider, ConsoleApplication8" 
      mapTo="ConsoleApplication8.RepositoryProvider, ConsoleApplication8" 
      name="RepositoryProvider" > 
     <lifetime type="singleton" /> 
     <constructor> 
     <param name="factories"> 
      <dependency /> 
     </param> 
     </constructor> 
    </type> 
    </types> 
</container> 

아마 어셈블리 이름으로 정규화 된 이름이 필요하지 않고 네임 스페이스가 등록되었습니다.

유형 :

public interface IRepositoryProvider 
{} 

public class RepositoryProvider : IRepositoryProvider 
{ 
    private IRepositoryFactories _factories; 
    private string _name; 

    public RepositoryProvider(IRepositoryFactories factories) { 
     _factories = factories; 
    } 

    public RepositoryProvider(string name) { 
     _name = name; 
    } 
} 

public interface IRepositoryFactories { } 

public class RepositoryFactories : IRepositoryFactories{} 

class Program 
{ 
    static void Main(string[] args) 
    { 
     IUnityContainer container = new UnityContainer(); 
     container.LoadConfiguration("MyContainer"); 

     var instance = container. 
          Resolve<IRepositoryProvider>("RepositoryProvider"); 
    } 
}