as
От: Shame Россия funtoo.org
Дата: 17.03.10 14:11
Оценка:
Вот тут различия с C#

есть такая строка
using System.Windows.Forms;

Button button = control as Button;
 
if (button != null) 
  ...
else 
  ...


match (control) {
  | button is Button => ...
  | listv is ListView => ...
  | _ => ... // null case
}


на C# тут происходит эта .NET магия, которая выбирает из web.config нужные настройки из секции SmallBusinessDataProviders классом SmallBusinessDataProvidersSection
_providersSection = (ConfigurationManager.GetSection("SmallBusinessDataProviders")) as SmallBusinessDataProvidersSection;

На немерле говорит found pattern expression () inside a raw expression
Динамик тайпкаст ( :> ) не спас на этот раз. Что делать

разве что _providersSection = match(ConfigurationManager.GetSection("SmallBusinessDataProviders"))
| sqlProvider => ???
الحقيقة:الشئ الوحيد الذي(لا)يصدقه الناس!ا الزواج : جمع.وطرح.ثم(ضرب)!ولكنه قبل ذلك(قسمة) المحامي:لسان.وحنجرة.وروب!يدافع عن مال موكله (أعزائي)!وهو لا يعرف أحد منّا!الطالب (الأول)على فصله!لولا وجود الأخرين
Re: as
От: Jack128  
Дата: 17.03.10 14:30
Оценка: 1 (1)
Здравствуйте, Shame, Вы писали:

S>на C# тут происходит эта .NET магия, которая выбирает из web.config нужные настройки из секции SmallBusinessDataProviders классом SmallBusinessDataProvidersSection

S>
S>_providersSection = (ConfigurationManager.GetSection("SmallBusinessDataProviders")) as SmallBusinessDataProvidersSection;
S>

S>На немерле говорит found pattern expression () inside a raw expression
S>Динамик тайпкаст ( :> ) не спас на этот раз. Что делать

S>разве что _providersSection = match(ConfigurationManager.GetSection("SmallBusinessDataProviders"))

S> | sqlProvider => ???

приведи конкретный код на N который те ошибку выдает.
По идее аналог шарповскому будет такой:

_providersSection = match(ConfigurationManager.GetSection("SmallBusinessDataProviders")) {
   | section is SmallBusinessDataProvidersSection => section
   | _ => null
}
Re: as
От: hardcase Пират http://nemerle.org
Дата: 17.03.10 14:34
Оценка: +1
Здравствуйте, Shame, Вы писали:

S>на C# тут происходит эта .NET магия, которая выбирает из web.config нужные настройки из секции SmallBusinessDataProviders классом SmallBusinessDataProvidersSection

S>
S>_providersSection = (ConfigurationManager.GetSection("SmallBusinessDataProviders")) as SmallBusinessDataProvidersSection;
S>

S>На немерле говорит found pattern expression () inside a raw expression
S>Динамик тайпкаст ( :> ) не спас на этот раз. Что делать

S>разве что _providersSection = match(ConfigurationManager.GetSection("SmallBusinessDataProviders"))

S> | sqlProvider => ???

Семантический аналог оператора as из C# таков:
_providersSection = match(ConfigurationManager.GetSection("SmallBusinessDataProviders")) {
 | x is SmallBusinessDataProvidersSection => x
 | _ => null
}



В Nemerle ключевое слово as используется для паттерн-матчинга:
match(some_variant) {
  | SomeVariant.A as a => WriteLine(a.i);
  | SomeVariant.B as b => WriteLine(b.x);
}
http://nemerle.org/Banners/?t=Developer!&g=dark /* иЗвиНите зА неРовнЫй поЧерК */
Re[2]: as
От: Shame Россия funtoo.org
Дата: 18.03.10 05:51
Оценка:
Здравствуйте, hardcase, Вы писали:

H>
H>_providersSection = match(ConfigurationManager.GetSection("SmallBusinessDataProviders")) {
H> | x is SmallBusinessDataProvidersSection => x
H> | _ => null
H>}
H>


спасибо, но оказалась не тут проблема. Не цепляет тип секции в целом...

<section name="FlowWebDataProviders" type="FlowWebProvidersSection" requirePermission="false"/>



  <FlowWebDataProviders peopleProviderName="sqlProvider" IzmListProviderName="sqlProvider">
    <PeopleProviders>
      <add name="sqlProvider" type="SqlPeopleProvider" connectionStringName="FlowServerConnectionString"/>
      <add name="xmlProvider" type="XmlPeopleProvider" schemaFile="People.xsd" dataFile="People.xml"/>
    </PeopleProviders>
    <IzmListProviders>
      <add name="sqlProvider" type="SqlIzmListProvider" connectionStringName="FlowServerConnectionString"/>
    </IzmListProviders>
  </FlowWebDataProviders>



  public class FlowWebProvidersSection : ConfigurationSection
  {
    [ConfigurationProperty("peopleProviderName", IsRequired = true)]
    public PeopleProviderName : string
    {
        get { this["peopleProviderName"] :> string }
        set { this["peopleProviderName"] = value; }
    }
    [ConfigurationProperty("IzmListProviderName", IsRequired = true)]
    public IzmListProviderName : string
    {
        get { (this["IzmListProviderName"] :> string) }
        set { this["IzmListProviderName"] = value; }
    }
    [ConfigurationProperty("PeopleProviders")]
    [ConfigurationValidatorAttribute(typeof(ProviderSettingsValidation))]
    public PeopleProviders : ProviderSettingsCollection
    {
        get { this["PeopleProviders"] :> ProviderSettingsCollection }
    }
    [ConfigurationProperty("IzmListProviders")]
    [ConfigurationValidatorAttribute(typeof(ProviderSettingsValidation))]
    public IzmListProviders : ProviderSettingsCollection
    {
        get { this["IzmListProviders"] :> ProviderSettingsCollection }
    }
  }



public class ProviderSettingsValidation : ConfigurationValidatorBase
  {
    public override CanValidate(typex : Type) : bool
    {
         if(typex : object == typeof(ProviderSettingsCollection)) true else false
    }

    /// <summary>
    // validate the provider section    
    /// </summary>
    public override Validate(value : object) : void
    {
      mutable providerCollection : ProviderSettingsCollection = match(value) 
             {
                | x is ProviderSettingsCollection => x
                | _ => null
             }
      unless (providerCollection == null) 
      {
        foreach (_provider is ProviderSettings in providerCollection) 
        {
          when (String.IsNullOrEmpty(_provider.Type)) 
          {
            throw ConfigurationErrorsException("Type was not defined in the provider");
          }
          mutable dataAccessType : Type = Type.GetType(_provider.Type);
          when (dataAccessType == null) 
          {
              throw (InvalidOperationException("Provider's Type could not be found"));
          }
        }
      }
    }
  }


может тут видно ошибку ?

Сообщение об ошибке синтаксического анализатора: Ошибка при создании обработчика раздела конфигурации для FlowWebDataProviders: Не удалось загрузить тип 'FlowWebProvidersSection'.
الحقيقة:الشئ الوحيد الذي(لا)يصدقه الناس!ا الزواج : جمع.وطرح.ثم(ضرب)!ولكنه قبل ذلك(قسمة) المحامي:لسان.وحنجرة.وروب!يدافع عن مال موكله (أعزائي)!وهو لا يعرف أحد منّا!الطالب (الأول)على فصله!لولا وجود الأخرين
Re[3]: as
От: hardcase Пират http://nemerle.org
Дата: 18.03.10 09:23
Оценка:
Здравствуйте, Shame, Вы писали:

S>Сообщение об ошибке синтаксического анализатора: Ошибка при создании обработчика раздела конфигурации для FlowWebDataProviders: Не удалось загрузить тип 'FlowWebProvidersSection'.


В конфиге нужно указать тип секции вместе с пространствами имен, в которые он вложен, а так же сборку, где он обитает, если он находится не в App_Code:

<section name="FlowWebDataProviders" type="MyProject.Namespace.FlowWebProvidersSection, MyProject.Assembly.Name" requirePermission="false" />


Код валидатора похоже просто скопирован с C#. На Nemerle так писать уж точно не стоит.

public class ProviderSettingsValidation : ConfigurationValidatorBase
  {
    public override CanValidate(typex : Type) : bool
    {
         typeof(ProviderSettingsCollection).Equals(typex)
    }

    /// <summary>
    // validate the provider section    
    /// </summary>
    public override Validate(value : object) : void
    {
        | providerCollection is ProviderSettingsCollection =>
            foreach (_provider is ProviderSettings in providerCollection) 
            {
              when (String.IsNullOrEmpty(_provider.Type)) 
                throw ConfigurationErrorsException("Type was not defined in the provider");

              def dataAccessType = Type.GetType(_provider.Type);
              when (null == dataAccessType) 
                throw ConfigurationErrorsException("Provider's Type could not be found");
            }        
        | _ => ();
    }
  }
http://nemerle.org/Banners/?t=Developer!&g=dark /* иЗвиНите зА неРовнЫй поЧерК */
Re[4]: as
От: Shame Россия funtoo.org
Дата: 18.03.10 10:04
Оценка:
Здравствуйте, hardcase, Вы писали:

H>а так же сборку


Сборку ?... как раз из-за отутствия таковой не добавлсяется папка App_Code (В WebSite она как-то есть по умолчанию), а с Web App не приходилось работать, таки не могу понять про сборку — надо добавять
<%@ Assembly Name="assemblyname" %>
NameSpace добавять были попытки — Не помогает. Но ошибка не меняется.

H>На Nemerle так писать уж точно не стоит.


спасибо за Equals но мне кажется валидатор тут не причём
الحقيقة:الشئ الوحيد الذي(لا)يصدقه الناس!ا الزواج : جمع.وطرح.ثم(ضرب)!ولكنه قبل ذلك(قسمة) المحامي:لسان.وحنجرة.وروب!يدافع عن مال موكله (أعزائي)!وهو لا يعرف أحد منّا!الطالب (الأول)على فصله!لولا وجود الأخرين
Re[5]: as
От: hardcase Пират http://nemerle.org
Дата: 18.03.10 10:25
Оценка:
Здравствуйте, Shame, Вы писали:

S>Здравствуйте, hardcase, Вы писали:


H>>а так же сборку


S>Сборку ?... как раз из-за отутствия таковой не добавлсяется папка App_Code (В WebSite она как-то есть по умолчанию), а с Web App не приходилось работать, таки не могу понять про сборку — надо добавять

S><%@ Assembly Name="assemblyname" %>
S>NameSpace добавять были попытки — Не помогает. Но ошибка не меняется.

Если тип проекта WebApp (не WebSite) то прописывать полное имя типа и имя сборки в конфиге ты обязан.
http://nemerle.org/Banners/?t=Developer!&g=dark /* иЗвиНите зА неРовнЫй поЧерК */
Re[6]: as
От: Shame Россия funtoo.org
Дата: 18.03.10 10:29
Оценка:
Здравствуйте, hardcase, Вы писали:

H>Если тип проекта WebApp (не WebSite) то прописывать полное имя типа и имя сборки в конфиге ты обязан.


А как назначить сборку ... assembly .. для моего WebApp ?
الحقيقة:الشئ الوحيد الذي(لا)يصدقه الناس!ا الزواج : جمع.وطرح.ثم(ضرب)!ولكنه قبل ذلك(قسمة) المحامي:لسان.وحنجرة.وروب!يدافع عن مال موكله (أعزائي)!وهو لا يعرف أحد منّا!الطالب (الأول)على فصله!لولا وجود الأخرين
Re[7]: as
От: hardcase Пират http://nemerle.org
Дата: 18.03.10 11:21
Оценка:
Здравствуйте, Shame, Вы писали:

S>Здравствуйте, hardcase, Вы писали:


H>>Если тип проекта WebApp (не WebSite) то прописывать полное имя типа и имя сборки в конфиге ты обязан.


S>А как назначить сборку ... assembly .. для моего WebApp ?


WebApp уже представляет собой самостоятельную сборку.

Если приложение называется MyProject, и в нем объявлен класс MyProject.MyConfigSection, то регистрировать эту секцию в web.config нужно следующим образом:
<section name="myConfigSection" type="MyProject.MyConfigSection, MyProject" />
http://nemerle.org/Banners/?t=Developer!&g=dark /* иЗвиНите зА неРовнЫй поЧерК */
Re[8]: as
От: Shame Россия funtoo.org
Дата: 18.03.10 11:48
Оценка:
Здравствуйте, hardcase, Вы писали:

H>
H><section name="myConfigSection" type="MyProject.MyConfigSection, MyProject" />
H>


Ага ... но я люблю пробелы и могу показать 2 вида ошибки

1)
namespace Flow_WEB_Nemerle.Config
{
  public class FlowWebProvidersSection : ConfigurationSection



<section name="FlowWebDataProviders" type="Flow_WEB_Nemerle.Config.FlowWebProvidersSection, Flow WEB Nemerle" requirePermission="false" allowDefinition="MachineToApplication"/>


Ошибка при создании обработчика раздела конфигурации для FlowWebDataProviders: Невозможно загрузить файл или сборку "Flow WEB Nemerle" или один из зависимых от них компонентов. Не удается найти указанный файл.

2)
<section name="FlowWebDataProviders" type="Flow_WEB_Nemerle.Config.FlowWebProvidersSection, Flow_WEB_Nemerle" requirePermission="false" allowDefinition="MachineToApplication"/>


вот эта —

              def dataAccessType = Type.GetType(_provider.Type);
              when (null == dataAccessType) 
                throw ConfigurationErrorsException("Provider's Type could not be found");


Вот ещё при использовании первого варианта и переносе класса ConfigurationSection в корень из папки PinkElephant появилась дополнительная информация в браузере :

Ошибка сервера в приложении '/'.
Ошибка конфигурации
Описание: Ошибка при обработке файла конфигурации, требуемого для обслуживания этого запроса. Изучите указанные ниже подробные сведения об этой ошибке и измените файл конфигурации.

Сообщение об ошибке синтаксического анализатора: Ошибка при создании обработчика раздела конфигурации для FlowWebDataProviders: Невозможно загрузить файл или сборку "Flow WEB Nemerle" или один из зависимых от них компонентов. Не удается найти указанный файл.

Ошибка источника:

Строка 2: <configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">
Строка 3: <configSections>
Строка 4: <section name="FlowWebDataProviders" type="Flow_WEB_Nemerle.Config.FlowWebProvidersSection, Flow WEB Nemerle" requirePermission="false" allowDefinition="MachineToApplication"/>
Строка 5: <sectionGroup name="system.web.extensions" type="System.Web.Configuration.SystemWebExtensionsSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
Строка 6: <sectionGroup name="scripting" type="System.Web.Configuration.ScriptingSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">


Исходный файл: ...\Projects\Flow WEB Nemerle\Flow WEB Nemerle\web.config Строка: 4

Трассировка загрузки сборки: Следующая информация может быть полезна при выяснении причин сбоя при загрузке сборки 'Flow WEB Nemerle'.

=== Информация о состоянии предварительной привязки ===
Журнал: User = ...
Журнал: DisplayName = Flow WEB Nemerle
(Partial)
Журнал: Appbase = .../Projects/Flow WEB Nemerle/Flow WEB Nemerle/
Журнал: Initial PrivatePath = ...\Projects\Flow WEB Nemerle\Flow WEB Nemerle\bin
Вызов сборки: (Unknown).
===
Журнал: данная привязка начинается в контексте загрузки default.
Журнал: используется файл конфигурации приложения: ...\Projects\Flow WEB Nemerle\Flow WEB Nemerle\web.config.
Журнал: используется файл конфигурации компьютера из C:\Windows\Microsoft.NET\Framework\v2.0.50727\config\machine.config.
Журнал: политика в данный момент не применяется к ссылке (личная, пользовательская, частичная привязка сборки или привязка по местоположению).
Журнал: попытка загрузки нового URL file:///C:/Windows/Microsoft.NET/Framework/v2.0.50727/Temporary ASP.NET Files/root/7c053c00/90d7449c/Flow WEB Nemerle.DLL.
Журнал: попытка загрузки нового URL file:///C:/Windows/Microsoft.NET/Framework/v2.0.50727/Temporary ASP.NET Files/root/7c053c00/90d7449c/Flow WEB Nemerle/Flow WEB Nemerle.DLL.
Журнал: попытка загрузки нового URL .../Projects/Flow WEB Nemerle/Flow WEB Nemerle/bin/Flow WEB Nemerle.DLL.
Журнал: попытка загрузки нового URL .../Projects/Flow WEB Nemerle/Flow WEB Nemerle/bin/Flow WEB Nemerle/Flow WEB Nemerle.DLL.
Журнал: попытка загрузки нового URL file:///C:/Windows/Microsoft.NET/Framework/v2.0.50727/Temporary ASP.NET Files/root/7c053c00/90d7449c/Flow WEB Nemerle.EXE.
Журнал: попытка загрузки нового URL file:///C:/Windows/Microsoft.NET/Framework/v2.0.50727/Temporary ASP.NET Files/root/7c053c00/90d7449c/Flow WEB Nemerle/Flow WEB Nemerle.EXE.
Журнал: попытка загрузки нового URL .../Projects/Flow WEB Nemerle/Flow WEB Nemerle/bin/Flow WEB Nemerle.EXE.
Журнал: попытка загрузки нового URL .../Projects/Flow WEB Nemerle/Flow WEB Nemerle/bin/Flow WEB Nemerle/Flow WEB Nemerle.EXE.

Информация о версии: Платформа Microsoft .NET Framework, версия:2.0.50727.4927; ASP.NET, версия:2.0.50727.4927

الحقيقة:الشئ الوحيد الذي(لا)يصدقه الناس!ا الزواج : جمع.وطرح.ثم(ضرب)!ولكنه قبل ذلك(قسمة) المحامي:لسان.وحنجرة.وروب!يدافع عن مال موكله (أعزائي)!وهو لا يعرف أحد منّا!الطالب (الأول)على فصله!لولا وجود الأخرين
Re[9]: as
От: hardcase Пират http://nemerle.org
Дата: 18.03.10 12:06
Оценка:
Здравствуйте, Shame, Вы писали:

S>вот эта -


S>
S>              def dataAccessType = Type.GetType(_provider.Type);
S>              when (null == dataAccessType) 
S>                throw ConfigurationErrorsException("Provider's Type could not be found");
S>


Я полагаю что _provider.Type содержит имя "SqlPeopleProvider", взятое отсюда:
<add name="sqlProvider" type="SqlPeopleProvider" connectionStringName="FlowServerConnectionString"/>


Укажи квалифицированное имя класса, по аналогии с именем класса конфигурации.
http://nemerle.org/Banners/?t=Developer!&g=dark /* иЗвиНите зА неРовнЫй поЧерК */
Re[10]: as
От: Shame Россия funtoo.org
Дата: 18.03.10 12:24
Оценка:
Здравствуйте, hardcase, Вы писали:

H>Укажи квалифицированное имя класса, по аналогии с именем класса конфигурации.


АААА ! Спасибо ! Заработало .
الحقيقة:الشئ الوحيد الذي(لا)يصدقه الناس!ا الزواج : جمع.وطرح.ثم(ضرب)!ولكنه قبل ذلك(قسمة) المحامي:لسان.وحنجرة.وروب!يدافع عن مال موكله (أعزائي)!وهو لا يعرف أحد منّا!الطالب (الأول)على فصله!لولا وجود الأخرين
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.