을 만들 수 있습니 IOC 컨트롤을 사용합니다.NET 에 배치 웹 프로젝트?

StackOverflow https://stackoverflow.com/questions/412859

문제

나는 현재의 라이브러리 UserControls 내가 사용하는에서 많은 우리의 웹 응용 프로그램입니다.나를 업데이트하고 싶은 이러한 컨트롤 그래서 사용할 수 있는 IOC 하는 데 도움이 별도 논리입니다.

그래서 나는 것 같은 웹 페이지에서 자체:

<prefix:ControlName ID="myControl" runat="server" property="value1" />

및 제어가 생성자 유사:

public ControlName (IControlLogic logic)

다음 방 IOC 컨테이너를 취급할 것입니다 주입입니다.할 수 있습니까?그렇다면 무엇 라이브러리를 제공합 이?링크가 있는 경우에는 당신은 당신이 알고있는 이에 대해 그들은 좋은 것 감사합니다.

사전에 감사합니다

도움이 되었습니까?

해결책 3

불행하게도 없다 하나의 이 질문에 대한 답변,많은 IOC 컨테이너를 포함하는 일부의 구현을 주입하 제어 속성 하는 방법은 없(현재)의 실제 만들기 제어없이 변 생성자입니다.

다른 팁

뉴욕 ASP.NET 하지 않는 것을 지원하기 쉬운 공장을 만들에 대한 패턴 제어합니다.그러나,3.5 당신은 매우 세밀한 제어를 통해 실제 코드는 ASP.NET 런타임을 생성합니다.aspx 파일입니다.

단순히 적용[ControlBuilder(...)]특성을 모든 컨트롤는 당신이 원하는 구성에 의해 컨테이너입니다.서브 클래스 ControlBuilder 과 재정의 ProcessGeneratedCode 대체 생성자를 호출하여 귀하의 컨테이너입니다.

여기에 간단한 예제:

public class ServiceProviderBuilder : ControlBuilder
{
    public override void ProcessGeneratedCode(System.CodeDom.CodeCompileUnit codeCompileUnit, System.CodeDom.CodeTypeDeclaration baseType, System.CodeDom.CodeTypeDeclaration derivedType, System.CodeDom.CodeMemberMethod buildMethod, System.CodeDom.CodeMemberMethod dataBindingMethod)
    {
        // search for the constructor
        foreach (CodeStatement s in buildMethod.Statements)
        {
            var assign = s as CodeAssignStatement;
            if (null != assign)
            {
                var constructor = assign.Right as CodeObjectCreateExpression;
                if (null != constructor)
                {
                    // replace with custom object creation logic
                    assign.Right = new CodeSnippetExpression("("+ ControlType.FullName + ")MyContainer.Resolve<" + ControlType.BaseType.FullName + ">()");
                    break;
                }
            }
        }
        base.ProcessGeneratedCode(codeCompileUnit, baseType, derivedType, buildMethod, dataBindingMethod);
    }
}    

[ControlBuilder(typeof(ServiceProviderBuilder))]
public partial class WebUserControl1 : System.Web.UI.UserControl
{
    public WebUserControl1()
    {

    }

    protected void Page_Load(object sender, EventArgs e)
    {

    }
}

예,당신이 할 수있는 좋은 당신 spring.net

http://www.springframework.net/doc-latest/reference/html/springair.html

나는 확실하지 않는 경우에 당신을 유지하려면 정렬 아이디어는 당신이 제안한다.

개인적으로 난 사용 spring.net 고 nHibernate 함께 있지만(을 피하는 최대 절전 모드 템플릿은 현재 제공하는)하는 환상적으로 작동하다.net MVC 베타 물건입니다.

용 Spring.net 을 처리하 nHibernate 약간 줄어 구성 항목 및 MVC 사용하지 않는 컨텍스트 xml 당신이해야(springair 좋은 예를 들어).

행운을 빕

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top