코드를 수정하지 않고 SubSonic 생성기를 확장 할 수 있습니까? 템플릿 내에서 사용할 수있는 내 자신의 사용자 지정 메서드를 추가하고 싶습니다. 유틸리티 (Utility.GetVariableType) 메소드와 비슷합니다.SubSonic 생성기 확장
답변
나는 내 자신의 문제에 대한 해결책을 찾았습니다. :)
이제 SubSonic 코드 자체를 다시 작성하거나 변경할 필요없이 템플릿에서 필요한 기능으로 SubSonic을 확장 할 수 있습니다.
내가하고 싶었던 것을 위해 작동하고 난 그것뿐만 아니라 그것이 여기에, 그래서 다른 사람을 위해 유용 할 수 있다고 생각 :
새로운 클래스 라이브러리 SubSonicHelper을 만듭니다. 광산에는 다음과 같은 클래스가 있습니다.
using System; using System.Collections.Generic; using System.Text; namespace Helpers.SubSonic { public class GeneratorHelper { public bool IsColumnAllowed(string columnName) { return columnName.Length == 1 || (columnName.Length > 1 && (!(columnName[0].ToString().Equals("_") && columnName[columnName.Length - 1].ToString().Equals("_")))) } } }
- SubSonicHelper.dll을 서브 소닉 프로젝트에 복사하십시오.
- templateDirectory 매개 변수를 사용하여 자신 만의 템플릿을 사용하도록 SubSonic 프로젝트를 설정하십시오.
편집 자신의 템플릿과에서 당신은 템플릿 내에서 사용할 수있는 GeneratorHelper의 인스턴스는이 후
const bool showGenerationInfo = false;
System.Reflection.Assembly a = System.Reflection.Assembly.LoadFile( System.IO.Path.Combine(System.IO.Directory.GetCurrentDirectory(), "SubSonicHelper.dll")); object instance = a.CreateInstance("Helpers.SubSonic.GeneratorHelper"); Type type = instance.GetType();
후 한 다음. 메서드에 액세스하려면 다음을 수행해야합니다.
- 사용할 메서드의 매개 변수에 대한 개체 배열을 만듭니다. col.propertyName으로 설정 한 columnName 매개 변수가 있습니다. 이것은 Update 메서드의 foreach (TableSchema.TableColumn col in cols) 루프 안에 있습니다.
- 개체 배열과 함께 사용하려는 메서드를 인수로 호출하십시오.
결과 개체를 검사하여 메서드 결과를 확인하십시오.그것 뿐이다
object[] arg = new object[]{col.PropertyName}; object isColumnAllowedResult = type.InvokeMember("IsColumnAllowed", System.Reflection.BindingFlags.Default | System.Reflection.BindingFlags.InvokeMethod, null, instance, arg); if (Convert.ToBoolean(isColumnAllowedResult))
! 이제 SubSonicHelper 클래스를 템플릿 내부에서 사용하려는 다른 메서드로 확장 할 수 있습니다.
짧은 대답은 아니오입니다. 유용하다고 생각되면 패치를 제출하면 핵심에 통합 될 가능성이 높습니다. 여기에 패치를 제출할 수 있습니다 : http://code.google.com/p/subsonicproject/issues/list
템플릿에 dll을 가져올 수 있습니까?
<% @ 가져 오기 네임 스페이스와 같은
= "NewHelpers.Utilities"%>
다음 함수를 호출하거나
당신은 템플릿에 내장를 확장하지 수있는 개체의 인스턴스를 만들 수 있지만 은 SubSonic.dll을 변경하지 않고을 자신의 템플릿으로 바꾸실 수 있습니다. 여기에 templateDirectory 매개 변수를 참조하십시오 : http://subsonicproject.com/docs/Generated_Classes/#Customizing_Active_Record
는 example configuration은 다음과 같습니다
<SubSonicService defaultProvider="Northwind" enableTrace="true"
templateDirectory="C:\Program Files\SubSonic\SubSonic 2.0.3\Templates\MVC">
<providers>
<clear/>
<add name="Northwind" type="SubSonic.SqlDataProvider, SubSonic"
connectionStringName="Northwind" generatedNamespace="Northwind"/>
</providers>
</SubSonicService>
당신은 here에서 내장 된 액티브 템플릿의 현재 버전을 얻을 수 있습니다.
- 1. Javascript 풍선 생성기/조작자
- 2. @TableGenerator를 사용하여 관련 엔터티를위한 확장 가능한 순차적 ID 생성기
- 3. SubSonic SqlQuery 개체를 일반 SQL로 변환하는 확장 메서드
- 4. SubSonic 3 설치 질문?
- 5. SubSonic 3 테스트 데이터베이스는 "SubSonic"입니다.
- 6. 이미지 생성기
- 7. 결합 생성기
- 8. 난수 생성기
- 9. 스윙 생성기
- 10. 난수 생성기
- 11. NHibernate 생성기
- 12. HTML 생성기?
- 13. 난수 생성기
- 14. SubSonic : BeforeDelete
- 15. Subsonic ActiveRecord
- 16. SubSonic Conventions
- 17. SubSonic CreatedBy
- 18. Subsonic 3.0.0.4 컴파일러 오류가 발생합니다.
- 19. symfony 관리 생성기 양식 객체
- 20. ADO.NET DbContext 생성기 vs. ADO.NET Poco 엔티티 생성기 (ObjectContext)
- 21. nhibernate 프록시 생성기
- 22. JavaScript의 임의 개체 생성기
- 23. asp.net 고유 링크 생성기
- 24. PHP 쿼리 생성기/리포터
- 25. 좋아하는 문서 생성기 시스템?
- 26. 그래픽 프리미티브 생성기
- 27. 개인 이름 생성기
- 28. ANTLR 문법 편집기 생성기?
- 29. 비 균일 난수 생성기
- 30. Expat XML 생성기 API
GAC의 NewHelpers.Utilities 네임 스페이스가 포함 된 DLL이 있는데이 DLL을 프로젝트의 DAL을 만드는 데 필요한 참조에 추가했습니다. 가져 오기 줄을 템플릿에 추가했지만 static 메서드를 호출하자마자 SubSonic이 ERROR와 충돌합니다. generate를 실행하려고 시도합니다. 도우미 클래스와 메서드는 모두 정적이며 다른 프로젝트에서 호출하여 작업 할 수 있습니다. 나는 sonic.exe generate/out Generated를 사용하여 내 DAL을 생성한다고 말해야합니다. 아마도 그것이 문제일까요? – Marco